我有一个符合理货的数据,现在我想要一个符合我的数据库的数据
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]
我想在 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]