我希望在SQL Server中将2个表合并并转换为1个表
如果在脚本上面运行,下面是2个表 我想输出像合并2表和输出像下面的图像我希望在SQL Server中将2个表合并并转换为1个表,sql,sql-server,Sql,Sql Server,如果在脚本上面运行,下面是2个表 我想输出像合并2表和输出像下面的图像 您可以使用行号连接表。应该像这样工作: declare @table table (groupname varchar(50), credit numeric(18,2), debit numeric(18,2), drcreffect varchar(50),
您可以使用行号连接表。应该像这样工作:
declare @table table (groupname varchar(50),
credit numeric(18,2),
debit numeric(18,2),
drcreffect varchar(50),
undergroup varchar(50)
)
declare @table1 table (groupname varchar(50),
credit numeric(18,2),
debit numeric(18,2),
drcreffect varchar(50),
undergroup varchar(50)
)
insert into @table
values ('Opening Balance', 0.00, 0.00, 'Dr', 'Master Group'),
('Opening Stock', 0.00, 0.00, 'Dr', 'Opening Stock'),
('Purchase', 0.00, 7800.00, 'Dr', 'Purchase'),
('Purchase Return', 2000.00, 0.00, 'Dr', 'Purchase'),
('Purchase Return', 3000.00, 0.00, 'Dr', 'Purchase'),
('Purchase Return', 3000.00, 0.00, 'Dr', 'Purchase')
insert into @table1
values ('Sales', 0.00, 5000.00 ,'Dr', 'Sales'),
('Sales Return', 2000.00, 0.00,'Dr', 'Sales'),
('Sales Return', 2000.00, 0.00,'Dr', 'Sales')
SELECT
groupname, credit, debit,
LAG(debit,1,0) OVER (ORDER BY groupname) - credit AS Total
FROM
(SELECT DISTINCT
groupname,
SUM(credit) OVER (PARTITION BY groupname) AS Credit,
SUM(debit) OVER (PARTITION BY groupname) AS debit,
drcreffect, undergroup
FROM
@table) X
SELECT
groupname, credit, debit,
LAG(debit, 1, 0) OVER (ORDER BY groupname) - credit AS Total
FROM
(SELECT DISTINCT
groupname,
SUM(credit) OVER(PARTITION BY groupname) AS Credit,
SUM(debit) OVER(PARTITION BY groupname) AS debit,
drcreffect, undergroup
FROM
@table1) X
PS:合并这些看似无关的查询似乎有点奇怪。如果我收到这样的请求,我会质疑动机,看看是否有更好的方式来满足它。这会使报表生成器或Excel模板与内联查询相冲突,因为列名在每个表\视图上都是唯一的,因此不能具有相同的列名,因此无法根据您的要求获得准确的输出。但是你可以试试这个
select t0.groupname, t0.credit, t0.debit, t0.Total ,t1.groupname as groupname1 , t1.credit as credit1, t1.debit as debit, t1.Total as Total1
from(
SELECT row_number() as row_num, groupname,credit,debit, LAG(debit,1,0) OVER (ORDER BY groupname)-credit AS Total from (
SELECT DISTINCT groupname,SUM(credit) OVER(PARTITION BY groupname) AS Credit,SUM(debit) OVER(PARTITION BY groupname) AS debit,drcreffect,undergroup
FROM @table) AS t0
join
(SELECT row_number() as row_num, groupname,credit,debit, LAG(debit,1,0) OVER (ORDER BY groupname)-credit AS Total from (
SELECT DISTINCT groupname,SUM(credit) OVER(PARTITION BY groupname) AS Credit,SUM(debit) OVER(PARTITION BY groupname) AS debit,drcreffect,undergroup
FROM @table1) AS t1
on t0.row_num=t1.row_num
结果
首先,您不能多次使用相同的列名称,为什么要合并它们?您可以在可确认时更改名称,但输出主foucusunion i行合并表请查看输出结果,因为我附加了图像您的输出示例仅显示了相邻的两个选择的内容,没有明显的逻辑来连接它们。在一个查询中实现这一点的目的是什么?请看我的新问题Yes is a perfact open能否添加总计和最后一列的总和SESH一些查询帮助输出一些小问题请帮助我你好Sartheish您的答案是正确的,但是一些小问题您可以更新吗,如果您删除销售退货行,使total direct 5000为总值,但不显示5000,请帮助我检查并帮助我澄清我的质疑,请查看我的新问题
;WITH T1
AS
(
SELECT
RN = ROW_NUMBER() OVER(ORDER BY groupname),
groupname,
credit,
debit,
LAG(debit, 1, 0) OVER(ORDER BY groupname)-credit AS Total
FROM
(
SELECT DISTINCT
groupname,
SUM(credit) OVER(PARTITION BY groupname) AS Credit,
SUM(debit) OVER(PARTITION BY groupname) AS debit,
drcreffect,
undergroup
FROM @table
)X
),T2
AS
(
SELECT
RN = ROW_NUMBER() OVER(ORDER BY groupname),
groupname,
credit,
debit,
LAG(debit, 1, 0) OVER(ORDER BY groupname)-credit AS Total
FROM
(
SELECT DISTINCT
groupname,
SUM(credit) OVER(PARTITION BY groupname) AS Credit,
SUM(debit) OVER(PARTITION BY groupname) AS debit,
drcreffect,
undergroup
FROM @table1
) X
),FNL
AS
(
SELECT
t1_groupname = T1.groupname,
T1_Credit = T1.Credit,
T1_debit = t1.debit,
T1_Total = t1.Total,
T2_groupname = T2.groupname,
T2_Credit = T2.Credit,
T2_debit = T2.debit,
T2_Total = T2.Total
FROM T1
FULL JOIN T2
ON T1.RN = T2.RN
)
SELECT
GroupName = t1_groupname,
Credit = T1_Credit,
Debit = T1_debit,
Total = T1_Total,
GroupName = T2_groupname,
Credit = T2_Credit,
Debit = T2_debit,
Total = T2_Total
FROM FNL
UNION
SELECT
GroupName = 'Total',
Credit = NULL,
Debit = NULL,
Total = SUM(T1_Total),
GroupName = 'Total',
Credit = NULL,
Debit = NULL,
Total = SUM(T2_Total)
FROM FNL
UNION
SELECT
GroupName = 'zGross Profit',
Credit = NULL,
Debit = NULL,
Total = NULL,
GroupName = 'Total',
Credit = NULL,
Debit = NULL,
Total = SUM(T2_Total)-SUM(T1_Total)
FROM FNL