我有30个表,如a,b,c,.. d1,列名是id,name,更新时间。列名称有所不同,但更新的时间列对于所有表都是通用的。有人可以帮我解决上述问题吗?
答案 0 :(得分:1)
您可以使用公共特定列动态检索所有表(updated_time,我假设这是DATETIME数据类型列),并显示每个表的每个日期的记录数
USE TESTDB --use the schema where your tables are
GO
DECLARE @nSQL NVARCHAR(MAX)
SELECT @nSQL = COALESCE(@nSQL + 'UNION ALL ' + CHAR(10), '') +
'SELECT ''' + TABLE_NAME + ''' AS TableName,
CAST(updated_time AS DATE) [date],
COALESCE(COUNT(*),0) cnt
FROM ' + QUOTENAME(TABLE_NAME) + CHAR(10) +
' GROUP BY CAST(updated_time AS DATE) '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'updated_time'
EXECUTE(@nSQL);
示例数据
CREATE TABLE t_tab1 (id INT, fname VARCHAR(10), updated_time DATETIME);
CREATE TABLE t_tab2 (id INT, lname VARCHAR(10), updated_time DATETIME);
CREATE TABLE t_tab3 (id INT, mname VARCHAR(10), updated_time DATETIME);
CREATE TABLE t_tab4 (id INT, addr VARCHAR(10), updated_time DATETIME);
INSERT INTO t_tab1 VALUES(1,'aaa',CAST('09/17/2017' AS DATE));
INSERT INTO t_tab1 VALUES(2,'bbb',CAST('09/17/2017' AS DATE));
INSERT INTO t_tab1 VALUES(1,'aaa',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab1 VALUES(2,'bbb',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab1 VALUES(3,'ccc',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab2 VALUES(1,'aaa',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab2 VALUES(2,'bbb',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab3 VALUES(1,'ccc',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab3 VALUES(2,'aaa',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab3 VALUES(3,'bbb',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab3 VALUES(4,'ccc',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab4 VALUES(1,'aaa',CAST('09/18/2017' AS DATE));
INSERT INTO t_tab4 VALUES(2,'bbb',CAST('09/18/2017' AS DATE));
结果
TableName date cnt
t_tab1 2017-09-17 2
t_tab1 2017-09-18 3
t_tab2 2017-09-18 2
t_tab3 2017-09-18 4
t_tab4 2017-09-18 2
当然,您始终可以编辑查询以显示所需的记录。
答案 1 :(得分:0)
您可以将所有表联合在一起,然后在更新时间列上进行聚合,例如
SELECT
t.updated,
COUNT(*) AS cnt
FROM
(
SELECT updated FROM a
UNION ALL
SELECT updated FROM b
UNION ALL
SELECT updated FROM b
UNION ALL
...
) t
GROUP BY t.updated;