2017-07-15 84 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 

希望幫助!!! :)

相關問題