UNION ALL
を使用して無関係なデータからリストを作成すると、SQL Server 2008でExcelに保存されます。SELECT
ステートメントのいずれかにORDER BY
と私の問題は、次のエラーメッセージサブクエリなしのUNION ALLで1つのクエリのみを処理する方法
'The multi-part identifier "p.Category" could not be bound.'
で発生するところである。これは、最初のSELECT
クエリのコメントを外すとき、私は二、以下の1が、休憩を好むことを単純化した作業コードの例です:
CREATE TABLE #People(Category varchar(50), [Name] varchar(50));
INSERT INTO #People VALUES(1, 'Steve');
INSERT INTO #People VALUES(99, 'Anna');
INSERT INTO #People VALUES(2, 'Sarah');
-- Unrelated data SELECT query
--SELECT 'Best Employee' AS Matrix
-- , 'Alan' AS [Name]
--UNION ALL
SELECT CASE
WHEN p.Category = 1
THEN 'Very Active'
WHEN p.Category = 2
THEN 'Active '
ELSE 'Departed'
END AS Matrix
, p.name AS [Name]
FROM #People p
ORDER BY p.Category;
DROP TABLE #People;
いくつかの調査の後、次のような方法でクエリを書き直すことができたことがわかりました。この小さな例では望みの結果が得られましたが、実際のケースでは理想的と思われるものはありません。下の作業例のように、サブクエリに頼らずに正しい結果を得る方法はありますか?
CREATE TABLE #People(Category varchar(50), [Name] varchar(50));
INSERT INTO #People VALUES(1, 'Steve');
INSERT INTO #People VALUES(99, 'Anna');
INSERT INTO #People VALUES(2, 'Sarah');
SELECT *
FROM
(
-- Unrelated data SELECT query
SELECT 'Best Employee' AS Matrix
, 'Alan' AS [Name]
, '' AS Category
UNION ALL
SELECT CASE
WHEN p.Category = 1
THEN 'Very Active'
WHEN p.Category = 2
THEN 'Active '
ELSE 'Departed'
END Matrix
, p.name AS [Name]
, p.Category Category
FROM #People p
) x
ORDER BY x.Category;
DROP TABLE #People;
「SELECT」ステートメントの実際の数が本当に心配しているわけではありません。私の望みは、「ORDER BY」を使ってステートメントを変更し、他のステートメントをそのまま残すことでした。 – sams