下面是一個例子表:+和CONCAT的區別?
CREATE TABLE Example
(
LastName varchar(255),
FirstName varchar(255),
HomeAddress varchar(255),
City varchar(255)
);
INSERT INTO Example VALUES ('Murphy', 'James','123 Easy St', 'New York');
INSERT INTO Example VALUES ('Black', 'John','345 Youfarted St', 'Boston');
INSERT INTO Example VALUES ('Black', 'Amy','123 Simple St', 'Chicago');
INSERT INTO Example VALUES ('Simpson', 'Bill','123 Whofarted St', 'New York');
INSERT INTO Example VALUES ('Jones', 'James','321 Foo St', 'Chicago');
INSERT INTO Example VALUES ('Black', 'John','275 Ipsum St', 'Boston');
INSERT INTO Example VALUES ('Murphy', 'Sean','983 Ifarted St', 'New York');
我有2個不同的數據塊,其中之一是2012年,2008年等SO,我必須總是使這兩個工作的代碼處理。我有一個工作的2012年查詢(使用CONCAT()),但在2008年,試圖用'+'使用相同的查詢不會打印任何內容。
這工作:
DECLARE @sql2 NVARCHAR(max)
SELECT
@sql2 = CONCAT(@sql2, ', COUNT(CASE WHEN city = ''', City, ''' THEN 1 END) as ', QUOTENAME(City))
FROM
Example
GROUP BY City
SET @sql2 = CONCAT('SELECT LastName', @sql2, ' FROM example GROUP BY LastName')
EXEC sp_executesql @sql2
將會產生的(這就是我想要的):
LastName Boston Chicago New York
Black 2 0 0
Jones 0 2 0
Murphy 0 0 2
Simpson 0 0 1
此,不工作:
DECLARE @sql NVARCHAR(max)
SELECT
@sql = @sql + ', COUNT(CASE WHEN city = ''' + City + ''' THEN 1 END) as ' + QUOTENAME(City)
FROM
Example
GROUP BY City
SET @sql = 'SELECT LastName' + @sql + ' FROM example GROUP BY LastName'
EXEC sp_executesql @sql
通過「不起作用',我的意思是它不打印任何結果。我回來的是Command(s) completed successfully.
什麼給?
OH!並請在這個查詢的範圍內工作。我知道還有其他方法可以給這隻貓上皮,但這是我選擇的方式。 (我需要它是動態的,我需要它不使用PIVOT。)
這是什麼節目?如果你試圖運行它返回結果呢? – xQbert
@xQbert - 我不知道你的意思。 – lukehawk
@WorkSmarter - 對不起,這是我抓住吸管。刪除這些不會做任何事情。 – lukehawk