2010-10-11 51 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