我有一个符合理货的数据,现在我想要一个符合我的数据库的数据

I have a data as per tally now i want a data as per my Database

我想在 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)

现在我的数据 table 就像

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    

逻辑有点不清楚,但您似乎汇总了 3 个相邻行的组。不幸的是,SQL tables 表示 无序 集合,因此没有“3 相邻行”这样的东西。

但是,如果我向数据添加标识列,则 table 将捕获插入顺序。这允许我们使用查询来定义组和聚合,例如:

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;

Here 是一个 db<>fiddle.

我不得不对你的代码做一点修改才能达到预期的结果。我必须创建一个 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]