Как показать данные строки в столбце?
Я новичок в T-SQL, я застрял в проблеме, в которой каждый день должна производиться строка и таблица, которая состоит из следующих столбцов "ДАТА", "ЦЕНА", "КАТЕГОРИЯ 1", "КАТЕГОРИЯ 2". Выходные данные должны создать столбец (комбинация "КАТЕГОРИЯ 1", "КАТЕГОРИЯ 2") и показать цену. Если цена недоступна, то должен быть показан ноль. Ниже приведен результат, который мне нужно получить
TABLE
-----------------------------------------------
DATE | PRICE | CATEGORY 1 | CATEGORY 2
-----------------------------------------------
20171215 285 Books Non-Fiction
20171212 390 Gaming PlayStation 4
20171213 40 Antiques collectables
ВЫХОД
DATE | Books- Non-Fiction | Gaming - PlayStation 4 | Antiques - collectables
20171212 NULL 390 NULL
20171213 NULL NULL 40
20171215 285 NULL NULL
возможно ли этого добиться?
2 ответа
Вы можете попробовать использовать агрегатную функцию условия
CREATE TABLE T(
DATE INT,
PRICE INT,
[CATEGORY 1] VARCHAR(50),
[CATEGORY 2] VARCHAR(50)
);
INSERT INTO T VALUES (20171215,285,'Books','Non-Fiction');
INSERT INTO T VALUES (20171212,390,'Gaming','PlayStation 4');
INSERT INTO T VALUES (20171213,40 ,'Antiques','collectables');
Запрос 1:
SELECT DATE,
SUM(CASE WHEN [CATEGORY 1] = 'Books' and [CATEGORY 2] = 'Non-Fiction' THEN PRICE end) 'Books- Non-Fiction ',
SUM(CASE WHEN [CATEGORY 1] = 'Gaming' and [CATEGORY 2] = 'PlayStation 4' THEN PRICE end) 'Gaming - PlayStation 4',
SUM(CASE WHEN [CATEGORY 1] = 'Antiques' and [CATEGORY 2] = 'collectables' THEN PRICE end) 'Antiques - collectables'
FROM T
GROUP BY DATE
ORDER BY DATE
| DATE | Books- Non-Fiction | Gaming - PlayStation 4 | Antiques - collectables |
|----------|---------------------|------------------------|-------------------------|
| 20171212 | (null) | 390 | (null) |
| 20171213 | (null) | (null) | 40 |
| 20171215 | 285 | (null) | (null) |
Попробуй это:
SELECT DATE,
SUM(CASE WHEN [CATEGORY 1] = 'Books' and [CATEGORY 2] = 'Non-Fiction' THEN PRICE ELSE null end) 'Books- Non-Fiction',
SUM(CASE WHEN [CATEGORY 1] = 'Gaming' and [CATEGORY 2] = 'PlayStation 4' THEN PRICE ELSE null end) 'Gaming - PlayStation 4',
SUM(CASE WHEN [CATEGORY 1] = 'Antiques' and [CATEGORY 2] = 'collectables' THEN PRICE ELSE NULL end) 'Antiques - collectables'
FROM YOURTABLE
GROUP BY DATE
ORDER BY DATE