T-SQL如果返回null和data,则选择Data,否则为null

时间:2011-08-03 16:40:35

标签: tsql join case

我有一个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声明吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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