Получить все значения во временной таблице с помощью sql pivot - PullRequest
1 голос
/ 27 февраля 2020

У меня есть эти данные во временной таблице

Country    |City
-----------|-------------
Philippines|Mandaluyong
Philippines|Quezon
Philippines|Aurora
America    |Example
America    |Example2

И я хочу отобразить с помощью сводки, как это

Philippines|America
-----------|-------------
Aurora     |Example
Mandaluyong|Example2
Quezon

Но в настоящее время я получил только

Philippines|America
-----------|-------------
Quezon|Example2

Вот мой код ниже. Я что-то пропустил?

DECLARE @TempTable TABLE (Country VARCHAR(MAX), City VARCHAR(MAX))
INSERT INTO @TempTable (Country, City)
SELECT  'Philippines' AS Country, 'Mandaluyong' AS City
UNION ALL
SELECT 'Philippines', 'Quezon'
UNION ALL
SELECT 'Philippines', 'Aurora'
UNION ALL 
SELECT 'America', 'Example'
UNION ALL 
SELECT 'America', 'Example2'

SELECT * FROM @TempTable

SELECT Philippines, America
FROM
(
SELECT Country, city
FROM @TempTable 
)temp
PIVOT
(
MAX (City)
For Country in (Philippines, America)
)piv

1 Ответ

2 голосов
/ 27 февраля 2020

Набор результатов группировался по полю «Страна», в результате на каждую страну приходилось по одной строке, что и дало результаты, как у вас.

При включении столбца группировки (ie нумерация записей по стране в функции row_number) вы получите ожидаемые результаты

DECLARE @TempTable TABLE (Country VARCHAR(MAX), City VARCHAR(MAX))
INSERT INTO @TempTable (Country, City)
SELECT  'Philippines' AS Country, 'Mandaluyong' AS City
UNION ALL
SELECT 'Philippines', 'Quezon'
UNION ALL
SELECT 'Philippines', 'Aurora'
UNION ALL 
SELECT 'America', 'Example'
UNION ALL 
SELECT 'America', 'Example2'

SELECT * FROM @TempTable

SELECT Philippines, America
FROM
(
SELECT row_number() over(partition by Country order by city) as rnk,Country, city
FROM @TempTable
WHERE country in ('Philippines','America')
)temp
PIVOT
(
MAX (City)
For Country in (Philippines, America)
)piv

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=212381456098cd4fd858de3e01257067

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...