UNION ALL
을 사용하여 관련이없는 데이터로 목록을 작성하면 SQL Server 2008의 Excel에 저장됩니다. SELECT
문 중 하나만 ORDER BY
이고 내 문제는 다음과 같은 오류 메시지가하위 쿼리없이 UNION ALL에서만 하나의 쿼리를 작성하는 방법
'The multi-part identifier "p.Category" could not be bound.'
로 발생하는 곳은이 첫 번째 SELECT
쿼리의 주석 때 두 번째 아래 하나를 제외하고 휴식을 선호하는 단순화 된 작업 코드 예제 :
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 문이 너무 많아서 걱정하지 않아도됩니다. 내 희망은 '주문서'로 진술을 변경하고 나머지는 그대로 두는 것뿐이었습니다. – sams