Как объединить две или более строки одной таблицы в столбцы на основе некоторых условий в SQL? - PullRequest
0 голосов
/ 08 июля 2019

Я хочу получить результат в виде слияния двух или более строк в одной таблице на основе некоторых условий.

Строки таблицы
Query Table

Здесь я хочу объединить ряды с одинаковыми торговыми головами в один ряд. и мы игнорируем расположение интервью в формате слияния ожидаемого результата (изображение ниже). и количество столбцов таблицы результатов будет зависеть от местоположения интервью.

Ожидаемый формат слияния результатов enter image description here

Пояснение к таблице слияния Здесь девять столбцов только из-за торговли сварщика имеет три места для интервью и каждый счетчик выбора местоположения объединяется в конце.

Я нашел некоторые решения, такие как Using Case , но в моем случае данные в Trade Head, Interview Locations не являются фиксированными. Может быть завтра можно поставить ASP.Net Programmer или Software Tester по их требованию.

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Этот следующий скрипт будет работать максимум 3 строки. Для большего количества строк вам нужно добавить больше логики в запросе для каждой торговой головы. Но поскольку не существует столбца идентификатора для определения более старой и более новой строки между одной и той же торговой головой, значения будут помещены в 9 различных столбцов, но порядок столбцов SelCnt и значение не будут синхронизированы. Но если в таблице есть идентификатор или какой-либо столбец автоинкремента, все будет работать просто как шарм.

Вы можете посмотреть демоверсию LIVE Здесь

WITH CTE([Trade Head], [Select Count On Date 1], [Select Count On Date 2], [Select Count On Date 3],C1,C2,C3)
AS
(
    SELECT [Trade Head], [Select Count On Date 1], [Select Count On Date 2],[Select Count On Date 3],
    CASE    WHEN RN = 1 THEN RN+0   WHEN RN = 2 THEN RN+2   WHEN RN = 3 THEN RN+4 END C1, 
    CASE    WHEN RN = 1 THEN RN+1   WHEN RN = 2 THEN RN+3   WHEN RN = 3 THEN RN+5 END C2, 
    CASE    WHEN RN = 1 THEN RN+2   WHEN RN = 2 THEN RN+4   WHEN RN = 3 THEN RN+6 END C3
    FROM
    (
        SELECT *, 
        ROW_NUMBER() OVER (
            PARTITION BY [Trade Head] 
            ORDER BY [ID]
            -- use ORDER BY [Trade Head] if no ID column exists
        )  RN
        FROM your_table            
    ) A
)

SELECT [Trade Head],
SUM(CASE WHEN C1 = 1 THEN [Select Count On Date 1] ELSE NULL END) SelCnt1,
SUM(CASE WHEN C2 = 2 THEN [Select Count On Date 2] ELSE NULL END) SelCnt2,
SUM(CASE WHEN C3 = 3 THEN [Select Count On Date 3] ELSE NULL END) SelCnt3,
SUM(CASE WHEN C1 = 4 THEN [Select Count On Date 1] ELSE NULL END) SelCnt4,
SUM(CASE WHEN C2 = 5 THEN [Select Count On Date 2] ELSE NULL END) SelCnt5,
SUM(CASE WHEN C3 = 6 THEN [Select Count On Date 3] ELSE NULL END) SelCnt6,
SUM(CASE WHEN C1 = 7 THEN [Select Count On Date 1] ELSE NULL END) SelCnt7,
SUM(CASE WHEN C2 = 8 THEN [Select Count On Date 2] ELSE NULL END) SelCnt8,
SUM(CASE WHEN C3 = 9 THEN [Select Count On Date 3] ELSE NULL END) SelCnt9
FROM CTE
GROUP BY [Trade Head]
0 голосов
/ 08 июля 2019

использовать агрегацию

select Thead,max(Selcnt1),max(selcnt2),....max(selcnN) from table
group by Thead
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...