2017-07-15 79 views
1

我遇到这种情况,我需要从包含列名'YrId'的多个表中获取记录,并且我只想从该表中检索不同的值,并且我想要计算按'YrId'分组的值。要获得其中包含我已返回我的表名下面的查询具有所需的列如何在SQL Server中使用count从多个表中获取不同的值?

SELECT 
    t.name AS [Table Name], 
    'Total Record Count'=max(i.rows) 
FROM 
    sys.tables AS t 
INNER JOIN 
    sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
INNER JOIN 
    sysindexes i ON t.object_id=i.id 
WHERE 
    c.name LIKE '%yrid%' 
GROUP BY 
    t.name 
HAVING 
    MAX(i.rows) > 0 
ORDER BY 
    [total record count] DESC 

从这个查询比0值列,我得到它具有列'yrid'现在让我运行不同的值表名称在查询上面给出的查询返回的表名称后进行查询。

select distinct yrid, 'Table1' 
from Table1 

但我有一个上述查询的问题,它在多行集合,我不想要的产生输出。我想生成相同的行集输出,应该在下面等给出:

Table Name YrId1Count YrId2Count 
---------------------------------- 
Table1  250   350 
Table2  320   410 

据我所知,它可以通过PIVOT来实现,但是我只是没能做到这一点。

+0

我不认为你的问题显然是可以理解的。你能否重新解释这个问题并添加一些示例源数据,以便我们知道你实际想要达到的目标?谢谢。 – ViKiNG

+0

有许多许多许多在线示例的枢纽。你尝试过吗? –

回答

0

从这个问题,我想你需要特定列的数量(在我的例子中说employeeid)。 以下示例将查找包含EmployeeId列的所有表,它将在每个表中查找Distinct EmployeeId并插入到@TableCounts中。最后,你在每个表中都有@Table Counts和表以及唯一编号的employeeIds。

DECLARE @t TABLE (name NVARCHAR(MAx)) 

DECLARE @curCol NVARCHAR(50), @query NVARCHAR(MAX) 

DECLARE @TableCounts TABLE (Name Nvarchar(max), NumberOfEmp INT) 


INSERT INTO @t 
SELECT 

    t.name 

FROM 
    sys.tables AS t 
INNER JOIN 
    sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 

WHERE 
    c.name LIKE '%EmployeeId%' 

    SELECT * FROM @t 



    WHILE((SELECT COUNT(*) FROM @t)>0) 
    BEGIN 
     SELECT Top 1 @curCol = name FROM @t 

     SET @query = 'INSERT INTO @TableCounts SELECT '''[email protected]+''',COUNT(DISTINCT EmployeeID) FROM ' + @curCol 



     EXEC sp_executesql @query; 

     DELETE FROM @t where name = @curCol 
    END 


    SELECT * FROM @TableCounts 

希望帮助!!! :)

相关问题