T-SQL COALESCE 没有 return 不同的值
T-SQL COALESCE does not return distinct values
此查询 returns Zip 的重复值 - 我认为不应该。
例如:@pivotColumns returns 以下列表,即使 zip 的子查询具有 "distinct Zip"。
我假设 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)
returns 下面的列表,例如 [39401]
重复:
[39401],[39406],[39465],[39475],[39401],[39402],[39406],[39465],[39475]
in
里的distinct
没用。 in
不会生成重复项,这对外部查询没有影响。
我想你想做的是:
select @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
from (select distinct Zip
from PivotStoreZip
where ZIP in ('39401', '39402', '39406', '39465', '39475')
) z;
我应该注意到这在实践中有效。我不是 100% 确定 Microsoft 保证此代码在一般情况下有效。
您可以尝试在子查询中使用 distinct
来删除重复的 Zip
而不是 where
条件
SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM (
Select distinct Zip
From PivotStoreZip
Where ZIP in ('39401','39402', '39406','39465','39475')
) t1
子查询中的 distinct 是不够的,就好像你在 [dbo].[PivotStoreZip]
中有重复项一样,它们会从你的主查询中弹出,所以也只需在其中添加一个 distinct:
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)
此查询 returns Zip 的重复值 - 我认为不应该。 例如:@pivotColumns returns 以下列表,即使 zip 的子查询具有 "distinct Zip"。 我假设 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)
returns 下面的列表,例如 [39401]
重复:
[39401],[39406],[39465],[39475],[39401],[39402],[39406],[39465],[39475]
in
里的distinct
没用。 in
不会生成重复项,这对外部查询没有影响。
我想你想做的是:
select @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
from (select distinct Zip
from PivotStoreZip
where ZIP in ('39401', '39402', '39406', '39465', '39475')
) z;
我应该注意到这在实践中有效。我不是 100% 确定 Microsoft 保证此代码在一般情况下有效。
您可以尝试在子查询中使用 distinct
来删除重复的 Zip
而不是 where
条件
SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM (
Select distinct Zip
From PivotStoreZip
Where ZIP in ('39401','39402', '39406','39465','39475')
) t1
子查询中的 distinct 是不够的,就好像你在 [dbo].[PivotStoreZip]
中有重复项一样,它们会从你的主查询中弹出,所以也只需在其中添加一个 distinct:
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)