我有大约24个表(JanSales13 - DecSales14),每个月的列完全相同。
我希望能够动态地或者可选地加入每个表。这是动态选择表格(例如,FebSales13& JulySales13或DecSales13& AprilSales14)。
首先,我需要union
所选/选定的表格。
在union
运算符组合这些表之后,我想选择一些列,然后聚合它们的事务数据。
逻辑:能够选择任何两个表。然后表格应合并为一个。在UNION
运算符之后,获取联合表的记录
这就是我到目前为止所拥有的。动态联合表。用户应该能够选择任何表格:
CREATE PROC spCombine
@Table_Name sysname,
@Table_Name2 sysname
AS
BEGIN
SET NOCOUNT OFF;
DECLARE @Dynamictbl nvarchar(MAX)
SET @Dynamictbl =
N'SELECT * FROM ' + @Table_Name +
' UNION
SELECT * FROM ' + @Table_Name2
EXECUTE sp_executesql @Dynamictbl
END
这两个表结合后应执行粗略查询
SELECT
Product, Description,
Sum(A_Sales ) AS [A_salesFeb],
Sum(A_Sales ) AS [A_salesMay],
Sum(A_Sales ) AS [B_salesFeb],
Sum(A_Sales ) AS [B_salesMay],
Sum(A_Sales ) AS [C_salesFeb],
Sum(A_Sales ) AS [C_salesMay],
FROM ……
GROUP BY Product, Description
所以我的期望是如果我执行商店程序,则会发生以下三个步骤
EXEC spCombine @Table_Name =’ FebSales13’, @Table_Name2=’ MaySales13’
图形图像:
答案 0 :(得分:1)
您的WHERE
条款
select [TP],
sum(Amount1) as Amount1_02,
sum(Amount1) as Amount1_03,
sum(Amount2) as Amount2_02,
sum(Amount2) as Amount1_03
from [dbo].[tbl1]
where Date = '01.02.2011'
OR
Date = '01.03.2015'
group by [TP]
答案 1 :(得分:1)
您需要条件聚合。像CASE
这样使用SUM
。
select [TP],
SUM(CASE WHEN Date = '01.02.2011' THEN Amount1 END) as Amount1_02,
SUM(CASE WHEN Date = '01.03.2011' THEN Amount1 END) as Amount1_03,
SUM(CASE WHEN Date = '01.02.2011' THEN Amount2 END) as Amount2_02,
SUM(CASE WHEN Date = '01.03.2011' THEN Amount2 END) as Amount1_03
FROM [dbo].[tbl1]
WHERE Date = '01.02.2011'
OR Date = '01.02.2011'
GROUP BY [TP]
答案 2 :(得分:1)
使用CASE
与SUM
正确的值:
select [TP],
sum(case when date = '02.2011' then Amount1 end) as Amount1_02,
sum(case when date = '03.2011' then Amount1 end) as Amount1_03,
sum(case when date = '02.2011' then Amount2 end) as Amount2_02,
sum(case when date = '03.2011' then Amount2 end) as Amount1_03
from [dbo].[tbl1]
where Date = '02.2011' OR Date = '03.2015'
group by [TP]