2010-10-11 41 views
0

喂朋友,查詢來選擇不同的

我需要一個查詢扔在有桌子temp_invoice比較的錯誤消息。

應該比較PB_Responsbility表客戶領域[任務RESP#],對抗[PB-ID]字段= 3D

temp_invoice格式

Concession Number [Task resp#] 

    TH-123     12345 
    TH-014     98065 
    TH-123     41027 
    TH-567     12345 
    TH-111     99765 
    TH-567     41027    
    TH-228     73095    
    TH-001     09129    
    TH-779     41027   
    TH-333     01029  
    TH-722     03489 

這應該覈對客戶是3D的數據庫表。

TABLE PB_Responsbility

[PB-ID]      Customer 
    09129      3D 
    98065      AB 
    12345      DC 
    41027      ZH 
    99765      3D 
    73095      UZ 

如果客戶沒有3D或如果[任務RESP#]未在表PB_Responsbility發現, 它應該拋出的消息,通過從選擇不同[任務RESP#] excel表格。

這裏所需要的輸出是「不正確的[任務RESP#]: - 。12345,98065,41027,73095,01029,03489

我寫的查詢,以便,

DECLARE @pb_id_msg VARCHAR(MAX) 
SET @pb_id_msg = '' 

SELECT @pb_id_msg = @pb_id_msg + ' ,' 
+ CONVERT(VARCHAR(10),[Task resp#]) FROM temp_invoice WHERE [Task resp#] NOT IN 
    (SELECT [PB-ID] FROM PB_Responsbility WHERE Customer = '3D') 
    GROUP BY CONVERT(VARCHAR(10),[Task resp#]). 

這根據需要產生的結果。但是,如果我修改與DISTINCT

SELECT DISTINCT @pb_id_msg = @pb_id_msg + ' ,' 
+ CONVERT(VARCHAR(10),[Task resp#]) FROM temp_invoice WHERE [Task resp#] NOT IN 
    (SELECT [PB-ID] FROM PB_Responsbility WHERE Customer = '3D') 

這導致只有1值查詢。請給我解釋一下,爲什麼具有鮮明的第二選擇查詢不工作?

回答

1

看起來像SQL Server將distinct解釋爲意味着您只想爲該變量賦值一次。

您可以通過移動到不同的子查詢解決這個問題:

SELECT @pb_id_msg = @pb_id_msg + ' ,' + CONVERT(VARCHAR(10),[Task resp#]) 
FROM (
     SELECT DISTINCT [Task resp#] 
     FROM temp_invoice 
     WHERE [Task resp#] NOT IN 
       (
       SELECT [PB-ID] 
       FROM PB_Responsbility 
       WHERE Customer = '3D' 
       ) 
     ) as SubQueryAlias 
+0

它可能是「失敗」與DISTINCT出於同樣的原因是「失敗」與ORDER BY,http://www.sqlmag.com /article/sql-server/multi-row-variable-assignment-and-order-by.aspx – 2010-10-11 09:25:12

+1

+1哇,Thanku非常..解釋給了我一個微笑。 – satya 2010-10-11 09:32:07