Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 使联合查询显示在同一行上_Sql_Sql Server - Fatal编程技术网

Sql 使联合查询显示在同一行上

Sql 使联合查询显示在同一行上,sql,sql-server,Sql,Sql Server,我每个月都有一组查询。他们碰到了一组帐号,但当他们返回时,会显示一个交错的结果: 554000 355 Transportation COS-Fuel NULL 68652.230000000000 554000 355 Transportation COS-Fuel 48923.270000000000 NULL 我希望他们能结合在一起(这仅仅是两个月,12号屁股会弄得一团糟) 我是这样设置的: ---JAN Actuals

我每个月都有一组查询。他们碰到了一组帐号,但当他们返回时,会显示一个交错的结果:

554000  355 Transportation  COS-Fuel    NULL                    68652.230000000000
554000  355 Transportation  COS-Fuel    48923.270000000000  NULL
我希望他们能结合在一起(这仅仅是两个月,12号屁股会弄得一团糟)

我是这样设置的:

    ---JAN Actuals
set @month = '1'
 SET @1Start = (SELECT StartDate FROM MiscReportTables.dbo.FiscalCalendar WHERE @year = [Year] AND Period = 1)
 SET @1End = (SELECT EndDate FROM MiscReportTables.dbo.FiscalCalendar WHERE @year = [Year] AND Period = 1)
Select distinct 
    LEDGERTRANS.Dimension as 'Department', 
    DIMENSIONS.DESCRIPTION as 'Division', 
    LedgerTable.AccountName as 'GL Description',
Case When @month = '1' Then SUM(AMOUNTMST) END as '1',
Case When @month = '2' Then SUM(AMOUNTMST)  END as '2',
Case When @month = '3' Then SUM(AMOUNTMST)  END as '3',
Case When @month = '4' Then SUM(AMOUNTMST) END  as '4',
Case When @month = '5' Then SUM(AMOUNTMST)  END as '5',
Case When @month = '6' Then SUM(AMOUNTMST) END  as '6',
Case When @month = '7' Then SUM(AMOUNTMST) END  as '7',
Case When @month = '8' Then SUM(AMOUNTMST)  END as '8',
Case When @month = '9' Then SUM(AMOUNTMST)  END as '9',
Case When @month = '10' Then SUM(AMOUNTMST)  END as '10',
Case When @month = '11' Then SUM(AMOUNTMST)  END as '11',
Case When @month = '12' Then SUM(AMOUNTMST)  END as '12'
Into #tempJan
from LEDGERTRANS 
Join LedgerTable on LedgerTable.Accountnum = Ledgertrans.AccountNum
Join Dimensions on NUM = LEDGERTRANS.Dimension2_
where transdate BETWEEN @1Start AND @1End and LedgerTrans.Dimension2_ in (@division)
Group By LEDGERTRANS.AccountNum,LEDGERTRANS.Dimension,LEDGERTRANS.Dimension2_,LedgerTable.AccountName,DIMENSIONS.DESCRIPTION

---FEB Actuals
set @month = '2'
 SET @2Start = (SELECT StartDate FROM MiscReportTables.dbo.FiscalCalendar WHERE @year = [Year] AND Period = dbo.fnGetPeriod(2,@month))
 SET @2End = (SELECT EndDate FROM MiscReportTables.dbo.FiscalCalendar WHERE @year = [Year] AND Period = dbo.fnGetPeriod(2,@month))
Select distinct 
    LEDGERTRANS.Dimension as 'Department', 
    DIMENSIONS.DESCRIPTION as 'Division', 
    LedgerTable.AccountName as 'GL Description',
Case When @month = '1' Then SUM(AMOUNTMST) END as '1',
Case When @month = '2' Then SUM(AMOUNTMST)  END as '2',
Case When @month = '3' Then SUM(AMOUNTMST)  END as '3',
Case When @month = '4' Then SUM(AMOUNTMST) END  as '4',
Case When @month = '5' Then SUM(AMOUNTMST)  END as '5',
Case When @month = '6' Then SUM(AMOUNTMST) END  as '6',
Case When @month = '7' Then SUM(AMOUNTMST) END  as '7',
Case When @month = '8' Then SUM(AMOUNTMST)  END as '8',
Case When @month = '9' Then SUM(AMOUNTMST)  END as '9',
Case When @month = '10' Then SUM(AMOUNTMST)  END as '10',
Case When @month = '11' Then SUM(AMOUNTMST)  END as '11',
Case When @month = '12' Then SUM(AMOUNTMST)  END as '12'
Into #tempFeb
from LEDGERTRANS 
Join LedgerTable on LedgerTable.Accountnum = Ledgertrans.AccountNum
Join Dimensions on NUM = LEDGERTRANS.Dimension2_
where transdate BETWEEN @2Start AND @2End and LedgerTrans.Dimension2_ in (@division)
Group By LEDGERTRANS.AccountNum,LEDGERTRANS.Dimension,LEDGERTRANS.Dimension2_,LedgerTable.AccountName,DIMENSIONS.DESCRIPTION


SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempFeb join LedgerTable on LedgerTable.AccountName = #tempFeb.[GL Description]

union
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempJan join LedgerTable on LedgerTable.AccountName = #tempJan.[GL Description]

drop table #tempJan
drop table #tempFeb

您需要使用联接而不是联合。 比如:

select
t1.department,
t1.division,
t1.[GL Description],
t1.1,
t2.1
...
from

(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempFeb join LedgerTable on LedgerTable.AccountName = #tempFeb.[GL Description]
) t1
inner join
(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempJan join LedgerTable on LedgerTable.AccountName = #tempJan.[GL Description]
) t2
on t1.departement = t2.department
and t1.division = t2.division
and t1.[GL Description] = t2.[GL Description]

这不是精确的代码,特别是我不理解您的别名(您的列名为1,2)。

您需要使用联接而不是并集。 比如:

select
t1.department,
t1.division,
t1.[GL Description],
t1.1,
t2.1
...
from

(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempFeb join LedgerTable on LedgerTable.AccountName = #tempFeb.[GL Description]
) t1
inner join
(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempJan join LedgerTable on LedgerTable.AccountName = #tempJan.[GL Description]
) t2
on t1.departement = t2.department
and t1.division = t2.division
and t1.[GL Description] = t2.[GL Description]

这不是精确的代码,特别是我不理解您的别名(您的列名为1,2)。

您需要使用联接而不是并集。 比如:

select
t1.department,
t1.division,
t1.[GL Description],
t1.1,
t2.1
...
from

(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempFeb join LedgerTable on LedgerTable.AccountName = #tempFeb.[GL Description]
) t1
inner join
(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempJan join LedgerTable on LedgerTable.AccountName = #tempJan.[GL Description]
) t2
on t1.departement = t2.department
and t1.division = t2.division
and t1.[GL Description] = t2.[GL Description]

这不是精确的代码,特别是我不理解您的别名(您的列名为1,2)。

您需要使用联接而不是并集。 比如:

select
t1.department,
t1.division,
t1.[GL Description],
t1.1,
t2.1
...
from

(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempFeb join LedgerTable on LedgerTable.AccountName = #tempFeb.[GL Description]
) t1
inner join
(
SELECT distinct LedgerTable.AccountNum,
    Department, 
    Division, 
    [GL Description], 
    [1],
    [2]
from #tempJan join LedgerTable on LedgerTable.AccountName = #tempJan.[GL Description]
) t2
on t1.departement = t2.department
and t1.division = t2.division
and t1.[GL Description] = t2.[GL Description]

这不是精确的代码,特别是我不理解您的别名(您的列名为1,2)。

其他选项可能是聚合:

SELECT
    T.AccountNum,
    T.Department,
    T.Division,
    SUM(ISNULL(T.JAN, 0)) AS JAN,
    SUM(ISNULL(T.FEB, 0)) AS FEB
FROM (
    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempFeb
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempFeb.[GL Description]

    UNION

    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempJan 
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempJan.[GL Description]
) T
GROUP BY
    T.AccountNum,
    T.Department,
    T.Division

其他选项可能是聚合:

SELECT
    T.AccountNum,
    T.Department,
    T.Division,
    SUM(ISNULL(T.JAN, 0)) AS JAN,
    SUM(ISNULL(T.FEB, 0)) AS FEB
FROM (
    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempFeb
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempFeb.[GL Description]

    UNION

    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempJan 
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempJan.[GL Description]
) T
GROUP BY
    T.AccountNum,
    T.Department,
    T.Division

其他选项可能是聚合:

SELECT
    T.AccountNum,
    T.Department,
    T.Division,
    SUM(ISNULL(T.JAN, 0)) AS JAN,
    SUM(ISNULL(T.FEB, 0)) AS FEB
FROM (
    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempFeb
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempFeb.[GL Description]

    UNION

    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempJan 
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempJan.[GL Description]
) T
GROUP BY
    T.AccountNum,
    T.Department,
    T.Division

其他选项可能是聚合:

SELECT
    T.AccountNum,
    T.Department,
    T.Division,
    SUM(ISNULL(T.JAN, 0)) AS JAN,
    SUM(ISNULL(T.FEB, 0)) AS FEB
FROM (
    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempFeb
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempFeb.[GL Description]

    UNION

    SELECT distinct 
        LedgerTable.AccountNum,
        Department, 
        Division, 
        [GL Description], 
        [1] AS JAN,
        [2] AS FEB
    FROM 
        #tempJan 
    JOIN LedgerTable 
        ON LedgerTable.AccountName = #tempJan.[GL Description]
) T
GROUP BY
    T.AccountNum,
    T.Department,
    T.Division



这就是
联合所做的,它基本上是堆叠结果集。如果要将其放在一行中,则需要使用联接。在这种情况下联接如何工作?我有点自吹自擂,把一些伪代码放在下面。这就是
联合所做的,它基本上是堆叠结果集。如果要将其放在一行中,则需要使用联接。在这种情况下联接如何工作?我有点自吹自擂,把一些伪代码放在下面。这就是
联合所做的,它基本上是堆叠结果集。如果要将其放在一行中,则需要使用联接。在这种情况下联接如何工作?我有点自吹自擂,把一些伪代码放在下面。这就是
联合所做的,它基本上是堆叠结果集。如果要将其放在一行中,则需要使用联接。在这种情况下联接如何工作?我有点自吹自擂,把一些psuedo代码放在下面。别名是1月2日的1,2月的1,等等,这为我提供了同一行中的所有内容,但每个查询的内容彼此相邻。对不起,我无法从您发布的代码中看出每个结果集中最后2列的来源。是否要将[1]中的所有值相加,等等?[1]已经在一起了。它只会被点击一次,否则将为空。让我们调用[1]一月和[2]二月(我应该这样做)。我希望它是:Account num | Department | Description |一月总计|二月总计别名为1表示一月2表示二月,等等这为我提供了同一行中的所有内容,但每个查询的内容彼此相邻分开抱歉,我无法从您发布的代码中看出每个结果集中最后2列的来源。是否要将[1]中的所有值相加,等等?[1]已经在一起了。它只会被点击一次,否则将为空。让我们调用[1]一月和[2]二月(我应该这样做)。我希望它是:Account num | Department | Description |一月总计|二月总计别名为1表示一月2表示二月,等等这为我提供了同一行中的所有内容,但每个查询的内容彼此相邻分开抱歉,我无法从您发布的代码中看出每个结果集中最后2列的来源。是否要将[1]中的所有值相加,等等?[1]已经在一起了。它只会被点击一次,否则将为空。让我们调用[1]一月和[2]二月(我应该这样做)。我希望它是:Account num | Department | Description |一月总计|二月总计别名为1表示一月2表示二月,等等这为我提供了同一行中的所有内容,但每个查询的内容彼此相邻分开抱歉,我无法从您发布的代码中看出每个结果集中最后2列的来源。是否要将[1]中的所有值相加,等等?[1]已经在一起了。它只会被点击一次,否则将为空。让我们调用[1]一月和[2]二月(我应该这样做)。我希望它是:Account num | Department | Description |一月总计|二月总计我一直得到一个无效的列名“JAN”。如果您以这种方式进行查询,则不应该这样做。但我建议您将列命名为其他名称,而不是“1”、“2”……我一直得到一个无效的列名“JAN”。如果您以这种方式进行查询,则不应该这样做。但我建议您将列命名为其他名称,而不是“1”、“2”……我一直得到一个无效的列名“JAN”。如果您以这种方式进行查询,则不应该这样做。但我建议您将列命名为其他名称,而不是“1”、“2”……我一直得到一个无效的列名“JAN”。如果您以这种方式进行查询,则不应该这样做。但我建议您将列命名为其他名称,而不是“1”、“2”。。。。