Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 distinct和count_Sql_Sql Server_Count_Distinct_Multiple Tables - Fatal编程技术网

多个表中一列的SQL distinct和count

多个表中一列的SQL distinct和count,sql,sql-server,count,distinct,multiple-tables,Sql,Sql Server,Count,Distinct,Multiple Tables,所以我想要的是有一个不同值的表和这些值的计数。基本上我希望它看起来像这样: DistinctValue | Count Bob | 4 Fred | 5 George | 2 Joeseph | 1 对于单个表,我使用: SELECT ColumnName, COUNT(*) from TableName group by Column 我将如何做到这一点,以便它跨越多个表。我有大约30张桌子,可能更多,我需要

所以我想要的是有一个不同值的表和这些值的计数。基本上我希望它看起来像这样:

DistinctValue | Count
Bob           |   4
Fred          |   5
George        |   2
Joeseph       |   1
对于单个表,我使用:

SELECT ColumnName, COUNT(*) from TableName  group by Column
我将如何做到这一点,以便它跨越多个表。我有大约30张桌子,可能更多,我需要做这个

任何帮助都将不胜感激。如果您需要更多信息,请告诉我。哦,不用担心列名,因为所有表都有相同的列名

WITH mytbl AS (
SELECT ColumnName, COUNT(*) AS myCount from TableName  group by Column
UNION ALL 
SELECT ColumnName, COUNT(*) from TableName2  group by Column
... a union all for every table
)

SELECT ColumnName, SUM(myCount)
FROM mytbl
GROUP BY ColumnName
-如果您使用的是早期版本的MS SQL,则可以将UNION语句放入大型子select或表变量中。
-也就是说,它们将在最后一个查询中取代mytbl,在底部查询中用CTE中的联合替换mytbl。您需要创建并执行动态tsql以获得结果:

SELECT 
    t.name,
    count(c.name) as columnsname
FROM 
    sys.tables t 
    inner join sys.columns c
    ON t.object_id = c.object_id
group by t.name
DECLARE @Tsql NVARCHAR(MAX) = ''
DECLARE @ColumnName SYSNAME = 'YourColumnName'

SELECT @Tsql = @Tsql + 'SELECT ''[' + c.TABLE_SCHEMA + '].[' + c.TABLE_NAME + ']'' AS TableName, ' +
    '[' + @ColumnName + '], COUNT(*) AS RecordCount FROM [' + c.TABLE_SCHEMA + '].[' + c.TABLE_NAME + '] GROUP BY [' + @ColumnName + '] UNION ' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS c
JOIN INFORMATION_SCHEMA.TABLES t
    ON t.TABLE_SCHEMA = c.TABLE_SCHEMA 
    AND t.TABLE_NAME = c.TABLE_NAME
    --Comment out the next line if you want data/counts for views too. 
    AND t.TABLE_TYPE = 'BASE TABLE'
WHERE c.COLUMN_NAME = @ColumnName

--Remove the last UNION (and carriage-return, line-feed)
SELECT @Tsql = LEFT(@Tsql, LEN(@Tsql) - 8)

--Verify query.
PRINT @Tsql

--Uncomment when ready to proceed.
--EXEC (@Tsql)

SQL-SQL的早期版本是一种查询语言,它不是DBMS产品。您使用的是哪种DBMS?博士后?Oracle?@a_horse_与_no_name我对一个数据库使用Sql Server 2008 R2,对另一个数据库使用Sql Server 2012。所有表中的列名都相同吗?@DMason是的,所有表中的列名都相同。我很难理解这是怎么回事。你能简单地给我解释一下吗?