T-SQL COALESCE не возвращает различные значения - PullRequest
0 голосов
/ 22 октября 2018

Этот запрос возвращает дубликаты значений для Zip - что, я думаю, не должно.Например: @pivotColumns возвращает следующий список, даже если подзапрос для zip имеет «отличный Zip».Я предполагаю, что QUOTENAME может не работать должным образом в целях возврата списка уникальных значений?Я хочу, чтобы ZipCode без дубликатов

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 голосов
/ 22 октября 2018

Если вам нужен только один столбец - Zip, просто не беспокойтесь о присоединении к таблице:

SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM ( VALUES ('39401'),('39402'),('39406'),('39465'),('39475') ) src (Zip)

Если вы должны убедиться, что Zip существует, вы можете проверить с помощью IN против PivotStoreZip:

SELECT @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM ( VALUES ('39401'),('39402'),('39406'),('39465'),('39475')) src (Zip)
WHERE Zip IN (SELECT Zip FROM PivotStoreZip)
0 голосов
/ 22 октября 2018

Вы можете попытаться использовать distinct в подзапросе для удаления дубликата Zip вместо where условие

SELECT   @PivotColumns = COALESCE (@PivotColumns + ',','') + QUOTENAME([Zip])
FROM (
    Select distinct Zip 
    From PivotStoreZip 
    Where ZIP in ('39401','39402', '39406','39465','39475')
) t1
0 голосов
/ 22 октября 2018

Отличительных элементов в подзапросе недостаточно, как если бы у вас были дубликаты в [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')
             )

print (@PivotColumns)

0 голосов
/ 22 октября 2018

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 гарантирует, что этот код работает вообще.

...