Как создать другую таблицу или таблицу Temp с результатами запроса Pivot - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть эта таблица

CREATE TABLE COMPUTERS 
(
    CUSTOMER_ID INT, 
    COMPUTER_NAME VARCHAR(50), 
    COMPUTER_OS VARCHAR(50)
);

INSERT INTO COMPUTERS 
VALUES (15001, 'DESKTOP-JKVB','Windows 7'),
       (15001, 'DESKTOP-SKVB','Windows 2012R2'),
       (15002, 'PC-JKVB45','Windows VISTA'),
       (15002, 'JOHN-PC','Windows  10'),
       (15002, 'SERVER-DC','Windows 7'),
       (15002, 'DATA-PC','Windows 2016'),
       (15002, 'PC-BACKOFFICE','Windows 2008R2'),
       (15003, 'DESKTOP-XPBACK','Windows 7'),
       (15003, 'PC-HDFU','Windows  2012R2'),
       (15003, 'DESKTOP-NO2','Windows 10'),
       (15004, 'SERVER-DHCP','Windows 7'),
       (15004, 'DESKTOP-NO1','Windows 2012R2');

С помощью переполнения стека я написал запрос для поворота вышеуказанных данных. Мой вопрос заключается в том, можем ли мы создать временную таблицу или обычную таблицу с результатами сводных данных.

PIVOT QUERY

;WITH cte AS 
(
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Customer_ID) AS Number
    FROM computers
),
cte2 AS 
(
    SELECT DISTINCT
        c.Customer_ID,
        c.Computer_Name,
        'Computer_Name_' + CAST(Number AS VARCHAR(100)) AS Computer
    FROM 
        cte AS c
),
cte_dist2 AS 
(
    SELECT DISTINCT Customer_ID
    FROM computers
),
cte3 AS 
(
    SELECT 
        c.Customer_ID, c.Computer_OS,
        'Computer_OS_' + CAST(Number AS VARCHAR(100)) AS OS
    FROM 
        cte AS c
)
SELECT DISTINCT
    cd2.Customer_ID,
    MAX(IIF(c2.Computer='Computer_Name_1',c2.Computer_Name,NULL)) as Computer_Name_1,
    MAX(IIF(c3.OS='Computer_OS_1',c3.Computer_OS,NULL)) as Computer_OS_1,
    MAX(IIF(c2.Computer='Computer_Name_2',c2.Computer_Name,NULL)) as Computer_Name_2,
    MAX(IIF(c3.OS='Computer_OS_2',c3.Computer_OS,NULL)) as Computer_OS_2,
    MAX(IIF(c2.Computer='Computer_Name_3',c2.Computer_Name,NULL)) as Computer_Name_3,
    MAX(IIF(c3.OS='Computer_OS_3',c3.Computer_OS,NULL)) as Computer_OS_3,
    MAX(IIF(c2.Computer='Computer_Name_4',c2.Computer_Name,NULL)) as Computer_Name_4,
    MAX(IIF(c3.OS='Computer_OS_4',c3.Computer_OS,NULL)) as Computer_OS_4,
    MAX(IIF(c2.Computer='Computer_Name_5',c2.Computer_Name,NULL)) as Computer_Name_5,
    MAX(IIF(c3.OS='Computer_OS_5',c3.Computer_OS,NULL)) as Computer_OS_5
FROM 
    cte_dist2 AS cd2
INNER JOIN 
    cte2 AS c2 ON cd2.Customer_ID = c2.Customer_ID
INNER JOIN 
    cte3 AS c3 ON cd2.Customer_ID = c3.Customer_ID
GROUP BY 
    cd2.Customer_ID

1 Ответ

2 голосов
/ 04 ноября 2019

Да, вы можете использовать временные таблицы ниже, чтобы показать два метода, которые вы можете использовать для создания временных таблиц

  1. select * into #temp from (--select query of the final cte function or query), и временная таблица будет создана автоматически для вас.

  2. Если вы хотите создать свою собственную временную таблицу, создайте временную таблицу, как показано ниже.

    Например,

    create table #Temp
    (
        EventID int, 
        EventTitle Varchar(50), 
        EventStartDate DateTime, 
        EventEndDate DatetIme, 
        EventEnumDays int,
        EventStartTime Datetime,
        EventEndTime DateTime, 
        EventRecurring Bit, 
        EventType int
    ) 
    

    и используйте Insert Into #Temp --select query of the final cte function or queryтакже будет работать для вас.

...