此查询返回Zip的重复值-我认为不应该。 例如:即使zip子查询具有“不同的Zip”,@ pivotColumns也会返回以下列表。 我假设QUOTENAME可能无法正常工作,以返回唯一值列表?我想要没有重复的邮政编码
DECLARE @PivotColumns AS NVARCHAR(MAX)
SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM [dbo].[PivotStoreZip]
Where Zip in (
Select distinct Zip
From PivotStoreZip
Where ZIP in ('39401','39402', '39406','39465','39475')
)
print (@PivotColumns)
print (@PivotColumns)
返回下面的列表,例如,[39401]
重复:
[39401],[39406],[39465],[39475],[39401],[39402],[39406],[39465],[39475]
答案 0 :(得分:0)
distinct
中的in
没有用。 in
不会生成重复项,这不会影响外部查询。
我想你想做
select @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
from (select distinct Zip
from PivotStoreZip
where ZIP in ('39401', '39402', '39406', '39465', '39475')
) z;
我应该注意,这实际上是可行的。我不是100%肯定Microsoft保证此代码可以正常运行。
答案 1 :(得分:0)
您可以尝试在子查询中使用distinct
来删除重复的Zip
而不是where
条件
SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM (
Select distinct Zip
From PivotStoreZip
Where ZIP in ('39401','39402', '39406','39465','39475')
) t1
答案 2 :(得分:0)
子查询中的唯一字符是不够的,因为如果[dbo].[PivotStoreZip]
中有重复项,它们将从主查询中弹出,因此也可以在其中添加唯一性:
DECLARE @PivotColumns AS NVARCHAR(MAX)
SELECT @PivotColumns = distinct COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM [dbo].[PivotStoreZip]
Where Zip in (
Select distinct Zip
From PivotStoreZip
Where ZIP in ('39401','39402', '39406','39465','39475')
)
打印(@PivotColumns)
答案 3 :(得分:0)
如果您唯一需要的列是Zip,那么首先就不必费心连接到表:
SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM ( VALUES ('39401'),('39402'),('39406'),('39465'),('39475') ) src (Zip)
如果必须确保Zip存在,则可以通过对PivotStoreZip使用IN
进行检查:
SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM ( VALUES ('39401'),('39402'),('39406'),('39465'),('39475')) src (Zip)
WHERE Zip IN (SELECT Zip FROM PivotStoreZip)