下面是一個例子表:如何結合EXEC語句結果?
CREATE TABLE Example
(
LastName varchar(255),
FirstName varchar(255),
HomeAddress varchar(255),
City varchar(255),
Gender varchar(255),
Role_Type varchar(255),
);
INSERT INTO Example
VALUES ('Murphy', 'James','123 Easy St', 'New York','Male', 'Manager'),
('Black', 'John','345 Youfarted St', 'Boston','Male', 'Employee'),
('Black', 'Amy','123 Simple St', 'Chicago','Female', 'Manager'),
('Simpson', 'Bill','123 Whofarted St', 'New York','Male', 'Employee'),
('Jones', 'Cindy','321 Foo St', 'Chicago','Female', 'Employee'),
('Black', 'John','275 Ipsum St', 'Boston','Male', 'Employee'),
('Murphy', 'Stephanie','983 Ifarted St', 'New York','Female', 'Employee');
這兩個EXEC語句是動態的,不使用PIVOT,這是我喜歡的。我想讓他們保持一致(至少在功能上,但實際上更好)。
DECLARE @sql1 NVARCHAR(max) = '', @sql2 NVARCHAR(max) = ''
SELECT
@sql1 = @sql1 + ', COUNT(CASE WHEN city = ''' + City + ''' THEN 1 END) as ' + QUOTENAME(City)
FROM
Example
WHERE
City IS NOT NULL
GROUP BY
City
SET @sql1 = 'SELECT LastName' + @sql1 + ' FROM example GROUP BY LastName'
EXEC sp_executesql @sql1
SELECT
@sql2 = @sql2 + ', COUNT(CASE WHEN Role_Type = ''' + Role_Type + ''' THEN 1 END) AS ' + QUOTENAME(Role_Type)
FROM
Example
WHERE
Role_Type IS NOT NULL
GROUP BY
Role_Type
SET @sql2 = 'SELECT LastName' + @sql2 + ' FROM example GROUP BY LastName'
EXEC sp_executesql @sql2
這些查詢產生這兩個表:
LastName Boston Chicago New York
-------------------------------------
Black 2 1 0
Jones 0 1 0
Murphy 0 0 2
Simpson 0 0 1
LastName Employee Manager
--------------------------------
Black 2 1
Jones 1 0
Murphy 1 1
Simpson 1 0
如何合併這兩個查詢?生成一個結果表?類似於以下內容:
LastName Boston Chicago New York Employee Manager
------------------------------------------------------
Black 2 1 0 2 1
Jones 0 1 0 1 0
Murphy 0 0 2 1 1
Simpson 0 0 1 1 0
這就是所謂的聯接。 –
@TabAlleman實際上你不能加入EXEC的結果,他使用動態SQL,所以不能轉換爲標準查詢......你需要一個Temp表(或表變量),並將兩個結果都插入到那個 – Milney
我想他可以在他的動態sql中加入JOIN。 –