T-SQL COALESCE不返回不同的值

时间:2018-10-22 17:07:45

标签: sql pivot coalesce

此查询返回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]

4 个答案:

答案 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)