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”。。。。