Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我希望在SQL Server中将2个表合并并转换为1个表_Sql_Sql Server - Fatal编程技术网

我希望在SQL Server中将2个表合并并转换为1个表

我希望在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),

如果在脚本上面运行,下面是2个表

我想输出像合并2表和输出像下面的图像


您可以使用行号连接表。应该像这样工作:

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