我有两张 table 。第一个表 (TableA) 有一些列,如 week1、week3、week4、Week7(动态)以及一些静态列,如 orgno、employeeID、员工姓名。
所有动态列都存在于另一个表 (TableB) 中。
现在我需要进行这样的查询
SELECT OrgNo,
SUM(SELECT ColName FROM TableB WHERE id=1),
SUM(SELECT ColName FROM TableB WHERE id=2),
SUM(SELECT ColName FROM TableB WHERE id=3),
SUM(SELECT ColName FROM TableB WHERE id=4),
FROM TableAO
GROUP BY OrgNo
我正在使用 SQL 2000。 提前致谢。
例子:
*
TableA:*
**Orgno EmployeeID EmployeeName Week1 week3 week4 Week7**
(1 1 XX 0 5 4 3)
(1 2 YY 1 6 0 2)
(2 1 XX 0 5 4 3)
(1 3 ZZ 1 6 0 2)
*TableB:*
**ID Name**
(1 Week1)
(2 Week3)
(3 Week4)
(4 Week7)
*Desire Output:*
**Orgno Week1 week3 week4 Week7**
(1 2 17 4 7)
(2 0 5 4 3)
最佳答案
这里不需要包含TABLE B
,只用第一个表就可以得到你想要的结果。
SELECT
Orgno,
SUM(Week1) Week1,
SUM(Week3) Week3,
SUM(Week4) Week4,
SUM(Week7) Week7
FROM
TableA
GROUp BY
Orgno
更新
根据您的评论,我了解到您不知道第一个表的列名,而您想从第二个表中获取该列名,在这种情况下您需要使用动态 SQL
。
您可以在单个查询中获取它并与动态 sql 字符串连接,而不是触发多个查询来 gt 每一列。你可以尝试这样的事情,
declare @sql varchar(max)
set @sql = 'SELECT Orgno,'
declare @tbl varchar(100)
set @tbl = 'tableB' -- put your table name here
SELECT @sql = @sql +'SUM(' + name + '),'
FROM tablB
WHERE Id IN(1,2,3,4)
set @sql = LEFT(@sql, LEN(@sql) - 1)
set @sql = @sql + ' FROM ' + @tbl + ' Group BY Orgno'
EXEC (@sql)
关于sql - SUM 函数中的 Select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711832/