2016-03-04 55 views
0

數據

row ID YEAR PROD STA     DATE 
    01 01 2011 APPLE NEW 2011-11-18 00:00:00.000 
    02 01 2011 APPLE NEW 2011-11-18 00:00:00.000 
    03 01 2013 APPLE OLD NULL 
    04 01 2013 APPLE OLD NULL 
    05 02 2013 APPLE OLD 2014-04-08 00:00:00.000 
    06 02 2013 APPLE OLD 2014-04-08 00:00:00.000 
    07 02 2013 APPLE OLD 2014-11-17 10:50:14.113 
    08 02 2013 APPLE OLD 2014-11-17 10:46:04.947 
    09 02 2013 MELON OLD 2014-11-17 11:01:19.657 
    10 02 2013 MELON OLD 2014-11-17 11:19:35.547 
    11 02 2013 MELON OLD NULL 
    12 02 2013 MELON OLD 2014-11-21 10:32:36.017 
    13 03 2006 APPLE NEW 2007-04-11 00:00:00.000 
    14 03 2006 APPLE NEW 2007-04-11 00:00:00.000 
    15 04 2004 APPLE OTH 2004-09-27 00:00:00.000 
    16 04 2004 APPLE OTH NULL 

行不會在表中的列。只是爲了顯示我想要的記錄。SQL組中找到行,其中一列有一個空和非空值

問題

我需要找到一組包括其中行(ID,YEAR,PROD,STA)具有至少一個NULL DATE和非空日期。

預期結果

從上面的數據集,這將是行9〜12和15〜16

林坐在前面OD SSMS,而且不知道如何得到這個。想着group byexists但真的不知道。

+0

爲什麼您的ID列有多個具有相同ID的行。不應該是唯一的ID? –

+0

這不是主鍵,而是已經聚合的查詢的結果。 –

回答

3

您可以使用COUNT ... OVER

SELECT ID, YEAR, PROD, STA, [DATE] 
FROM (
    SELECT ID, YEAR, PROD, STA, [DATE], 
     COUNT(IIF([DATE] IS NULL, 1, NULL)) OVER 
       (PARTITION BY ID, YEAR, PROD, STA) AS cnt_nulls, 
     COUNT(IIF([DATE] IS NOT NULL, 1, NULL)) OVER 
       (PARTITION BY ID, YEAR, PROD, STA) AS cnt_not_nulls 
    FROM mytable) AS t 
WHERE t.cnt_nulls > 0 AND t.cnt_not_nulls > 0 

COUNT窗口版本應用數據的兩次ID, YEAR, PROD, STA分區:它的每一行當前分區的人口返回。計數有條件地執行

  • 第一COUNT計數分區內的NULL[Date]值數
  • 第二COUNT計數的分區內NOT NULL[Date]值的數目。

外部查詢檢查具有至少一個兩者的內部查詢的兩個COUNT功能的計數分區。

+1

我不明白這一點,但我接受它 - 它的作品! :) –

+0

@RobertNiestroj如果他們花費一些精力來解釋查詢,而不是僅僅發佈一大堆T-SQL,會是非常好的。 – Lankymart

+1

@Lankymart好吧,你是對的。請檢查我所做的修改。 –