你好朋友,
我需要一个查询来与表 temp_invoice进行比较时抛出错误消息。
它应将[任务分配#]字段与 PB_Responsbility 表中[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的数据库表。
表PB_Responsbility
[PB-ID] Customer
09129 3D
98065 AB
12345 DC
41027 ZH
99765 3D
73095 UZ
如果客户不是3D或者如果在表PB_Responsbility中找不到[Task resp#], 它应该抛出一条消息,通过选择不同的[任务分配#] 来自excel表。
此处所需输出为“不正确[任务分配#]: - 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个值。请解释一下,为什么带有distinct的第二个选择查询不起作用?
答案 0 :(得分:1)
看起来SQL Server解释distinct
意味着您只想为变量赋值一次。
您可以通过将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