Создайте табличное представление Par1 x Par2 из таблицы SQL (par1, par2, значение) - PullRequest
1 голос
/ 16 января 2020

Как создать Par1 x Par2 табличный вывод (чтобы вы могли представить его пользователю удобным и понятным способом) из SQL Table (par1, par2, value). Пример:

enter image description here

У меня не так уж много кода и ничего не стоит представить, и я предполагаю, что есть стандартный способ сделать это. Я начал пытаться сгенерировать заголовок строки и добавить UNION с помощью оконной функции WITH, но сразу начал бороться.

Образец тестовых данных:

CREATE TABLE TestTable(
    [Par1] [int] NULL,
    [Par2] [int] NULL,
    [Val] [int] NULL
) ON [PRIMARY]
GO

INSERT INTO TestTable (Par1, Par2, Val)
VALUES
    (1, 20  , 104),
    (1, 40  , 105),
    (1, 60  , 110),
    (1, 80  , 115),
    (1, 100 , 148),
    (1, 120 , 150),
    (2, 20  , 162),
    (2, 40  , 163),
    (2, 60  , 174),
    (2, 80  , 188),
    (2, 100 , 192),
    (2, 120 , 196),
    (3, 20  , 200),
    (3, 40  , 217),
    (3, 60  , 231),
    (3, 80  , 255),
    (3, 100 , 279),
    (3, 120 , 283),
    (4, 20  , 284),
    (4, 40  , 284),
    (4, 60  , 286),
    (4, 80  , 288),
    (4, 100 , 297),
    (4, 120 , 300),
    (5, 20  , 303),
    (5, 40  , 305),
    (5, 60  , 307),
    (5, 80  , 325),
    (5, 100 , 337),
    (5, 120 , 349)

Примечание: Я уверен, что на этот вопрос нужно было ответить раньше, однако я не могу найти соответствующие ответы в Google. Поиск строк типа «CREATE TABLE VIEW» дает совершенно несущественные результаты ... :-). Извините, если я не могу найти правильную формулировку.

1 Ответ

0 голосов
/ 16 января 2020

Требуется условная агрегация:

SELECT Par1, 
       SUM(CASE WHEN Par2 = 20 THEN Val ELSE 0 END) AS 20_Val,
       . . .
       SUM(CASE WHEN Par2 = 120 THEN Val ELSE 0 END) AS 120_Val
FROM TestTable tt
GROUP BY Par1;
...