У меня есть данные в соответствии с теперь я хочу данные в соответствии с моей базой данных - PullRequest
0 голосов
/ 29 ноября 2018

я хочу повернуть данные в sql, у меня есть данные, и я прикрепил скрипт, чтобы вы могли создать его в своей структуре

CREATE TABLE pivot1
(
date DATE,
ledger VARCHAR(100),
ReceiptType NVARCHAR(50),
Debit DECIMAL(18, 4),
credit DECIMAL(18, 4)
);

INSERT INTO pivot1 VALUES('01-01-2018','G-704 Rushang Vora','receipt',200,NULL)
INSERT INTO pivot1 VALUES(NULL,'icici 0000123456789',NULL,NULL,100)
INSERT INTO pivot1 VALUES(NULL,'abc',NULL,NULL,NULL)

INSERT INTO pivot1 VALUES('01-01-2018','G-705 Shailesh Sevra','receipt',NULL,'500')
INTO pivot1 VALUES(NULL,'Kotak 00012456',NULL,'200',NULL)
INSERT INTO pivot1 VALUES(NULL,'pqr',NULL,NULL,NULL)

теперь моя таблица данных выглядит как

date        ledger                  ReceiptType Debit       credit      
2018-01-01  G-704 Rushang Vora      Receipt     200.0000    NULL        
NULL        ICICI 0000123456789     NULL        NULL        100.0000    
NULL        abc                     NULL        NULL        NULL        
2018-01-01  G-705 Shailesh Sevra    receipt     NULL        500.0000    
NULL        Kotak 00012456          NULL        200.0000    NULL        
NULL        pqr                     NULL        NULL        NULL        

Я хочу, чтобы мой SQL-запрос дал мне результат, как показано ниже:

date        ledger                bankdetails          comments receipttype debit credit 
2018-01-01  G-704 Rushang Vora    ICICI 0000123456789  abc      receipt     200   100
2018-01-01  G-705 Shailesh Sevra  Kotak 00012456       pqr      receipt     200   500    

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

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

CREATE TABLE #pivot1
(
[IDENTITYCOL] INT,
date DATE,
ledger VARCHAR(100),
ReceiptType NVARCHAR(50),
Debit DECIMAL(18, 4),
credit DECIMAL(18, 4)
);

INSERT INTO #pivot1 VALUES(1,'01-01-2018','G-704 Rushang Vora','receipt',200,NULL)
INSERT INTO #pivot1 VALUES(1,NULL,'icici 0000123456789',NULL,NULL,100)
INSERT INTO #pivot1 VALUES(1,NULL,'abc',NULL,NULL,NULL)

INSERT INTO #pivot1 VALUES(2,'01-01-2018','G-705 Shailesh Sevra','receipt',NULL,'500')
INSERT INTO #pivot1 VALUES(2,NULL,'Kotak 00012456',NULL,'200',NULL)
INSERT INTO #pivot1 VALUES(2,NULL,'pqr',NULL,NULL,NULL)


WITH PIVOTCTE AS
(
    SELECT [IDENTITYCOL],DATE 
    ,CASE 
        WHEN LEDGER LIKE 'G-%' THEN LEDGER
    END AS LEDGER
    ,CASE 
        WHEN LEDGER LIKE '%[a-z]%' AND LEDGER LIKE '%[0-9]%'AND LEDGER NOT LIKE '%-%' THEN LEDGER
    END AS BANKDETAILS
    ,CASE 
        WHEN LEDGER LIKE '%[a-z]%' AND LEDGER NOT LIKE '%[0-9]%' THEN LEDGER
    END AS COMMENTS
    , RECEIPTTYPE ,DEBIT, CREDIT 
    FROM #pivot1 
)
SELECT MAX(DATE) AS DATE 
,MAX(LEDGER) AS LEDGER
,MAX(BANKDETAILS) AS BANKDETAILS
,MAX(COMMENTS) AS COMMENTS
,MAX(RECEIPTTYPE) AS RECEIPTTYPE
,MAX(DEBIT) AS DEBIT
,MAX(CREDIT) AS CREDIT
FROM PIVOTCTE
GROUP BY [IDENTITYCOL]
0 голосов
/ 29 ноября 2018

Логика немного неясна, но у вас, кажется, есть группы из 3 смежных строк, которые суммируются.К сожалению, таблицы SQL представляют неупорядоченные наборы, поэтому не существует такой вещи, как "3 смежные строки".

Однако, если я добавлю в данные столбец идентификаторов, таблица будет захватыватьпорядок вставки.Это позволяет нам определять группы и агрегировать, используя запрос, такой как:

select grp, max(date) as date,
       max(case when seqnum = 0 then ledger end) as ledger,
       max(case when seqnum = 1 then ledger end) as bankdetails,
       max(case when seqnum = 2 then ledger end) as comment,
       max(receipttype) as receipttype,
       sum(debit) as debit,
       sum(credit) as credit
from (select  p.*,
              (row_number() over (order by id) - 1) % 3 as seqnum,
              (row_number() over (order by id) - 1) / 3 as grp
      from pivot1 p
     ) p
group by grp;

Здесь - это db <> скрипка.

...