选择不带 NULL 的不同多个字段

发布于 2024-11-29 06:55:41 字数 596 浏览 0 评论 0原文

我有一个包含值 ID 和值的表,

--------------
| id | value |
--------------
|  1 |  NULL |
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------
|  2 |  NULL |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------

我需要从表中选择不同的 id 和相应的值。选择 Id 时应是唯一的,如果值字段中有多个值,则应仅检索非 NULL 值,

因此结果应如下所示。

--------------
| id | value |    
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------    
|  3 |     B |
--------------

如何实现这一目标?使用 SQL Server 2005

I have a table with Value ID and Value

--------------
| id | value |
--------------
|  1 |  NULL |
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------
|  2 |  NULL |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------
|  3 |     B |
--------------

I need to select distinct id and corresponding value from the table. When selecting the Id should be unique and if it is having multiple values in the value field it should retrieve only not NULL values

So the result should be like below.

--------------
| id | value |    
--------------
|  1 |     A |
--------------
|  2 |  NULL |
--------------    
|  3 |     B |
--------------

How to achieve this? using SQL server 2005

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋千易 2024-12-06 06:55:42

您可以使用常规的GROUP BY

GROUP BY 将从

  • 1 中消除 NULL 值,因为存在其他值。
  • 保留 2NULL 值,因为它只有 NULL 值。

SQL语句

SELECT  id
        , MIN(value)
FROM    YourTable
GROUP BY
        id

测试脚本

;WITH q (id, value) AS (
    SELECT 1, NULL
    UNION ALL SELECT 1, 'A'
    UNION ALL SELECT 2, NULL
    UNION ALL SELECT 2, NULL
    UNION ALL SELECT 3, 'B'
    UNION ALL SELECT 3, 'B'
    UNION ALL SELECT 3, 'B'
)
SELECT  id
        , MIN(value)
FROM    q       
GROUP BY
        id

You can use a regular GROUP BY.

The GROUP BY will

  • eliminate the NULL value from 1 because other values are present.
  • retain the NULL value for 2 because it only has NULL values.

SQL Statement

SELECT  id
        , MIN(value)
FROM    YourTable
GROUP BY
        id

Test script

;WITH q (id, value) AS (
    SELECT 1, NULL
    UNION ALL SELECT 1, 'A'
    UNION ALL SELECT 2, NULL
    UNION ALL SELECT 2, NULL
    UNION ALL SELECT 3, 'B'
    UNION ALL SELECT 3, 'B'
    UNION ALL SELECT 3, 'B'
)
SELECT  id
        , MIN(value)
FROM    q       
GROUP BY
        id
听风吹 2024-12-06 06:55:42

这有点复杂,但应该可以解决问题:

select distinct x.id, x.value
  from table x
 where x.value is not null 
    or not exists 
       (select y.id 
          from table y 
         where y.id = x.id 
           and y.value is not null)

It's a bit convoluted, but it should do the trick:

select distinct x.id, x.value
  from table x
 where x.value is not null 
    or not exists 
       (select y.id 
          from table y 
         where y.id = x.id 
           and y.value is not null)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文