【问题标题】:T-SQL Select Data if both null and data are returned, else null如果同时返回 null 和 data,则 T-SQL 选择数据,否则为 null
【发布时间】:2011-10-19 06:57:03
【问题描述】:

我有一个导致以下输出的 t-sql 报告:

     A       B             C
Bridgevine  6093690444  3917018
Bridgevine  972         3929277
Bridgevine  974 
Bridgevine  974         3918929
CSPP Test   72720110438 
CSPP Test   1234    
CSPP Test   CCDSTSTNW   
Intelisys   12114 - DD  
Intelisys   12114 - DD  3844758
Intelisys   12553 - TL  3881365

问题是(作为示例)显示 B = 974 的两条记录。我只希望报告显示 C 具有值的位置。如果一条记录对 C 没有价值,我希望它仍然显示该记录。所以这是所需的输出:

     A       B             C
Bridgevine  6093690444  3917018
Bridgevine  972         3929277
Bridgevine  974         3918929
CSPP Test   72720110438 
CSPP Test   1234    
CSPP Test   CCDSTSTNW       
Intelisys   12114 - DD  3844758
Intelisys   12553 - TL  3881365

我知道这应该不难,但我似乎无法弄清楚。您会使用 COALESCE 或 CASE 语句,还是使用其他语句?

【问题讨论】:

    标签: tsql join case


    【解决方案1】:
    SELECT ...
    FROM table_1 a WHERE a.C is NOT NULL OR 
    (SELECT COUNT(*) FROM table_1 a1 WHERE a1.B = a.B)=1
    

    【讨论】:

      【解决方案2】:

      可能是一个聚合如果您没有 A 和 B 相同但 C 具有不同非 Null 值的记录

      SELECT
        A, B, MAX(C)
      FROM
       whatever
      GROUP BY
        A, B
      ORDER BY
       whatever
      

      所以这对于像这样的数据失败了

      CSPP Test   SomeB    null
      CSPP Test   SomeB    FirstC
      CSPP Test   SomeB    SecondC    --only get this row
      

      Intelisys   AnotherB    ValidC1
      Intelisys   AnotherB    ValidC2    --only get this row
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多