は、たとえばテーブルです:+と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');
私はSO 2つの異なるDBを、2012年での1、他の2008年を持って、私はいつもの両方で動作するコードを作るに対処する必要があります。私は働いている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
THIS、動作しません:
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を使用しないようにする必要があります。)
あなたは、SQL変数@ sp_execute前@SQLを書き出す場合、それは何を示していますか?それを実行しようとすると結果が返されますか? – xQbert
@xQbert - あなたは何を意味するのか分かりません。 – lukehawk
@WorkSmarter - 申し訳ありませんが、私はストローで掴んでいました。それらを削除することは何もしません。 – lukehawk