【发布时间】:2017-03-30 01:46:26
【问题描述】:
我正在使用 UNION ALL 从不相关的数据创建一个列表,以便在 SQL Server 2008 中保存到 Excel。只有一个 SELECT 语句将具有 ORDER BY,这就是我的问题出现的地方以下错误信息
'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;
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-order-by union-all