【发布时间】:2020-10-12 04:33:50
【问题描述】:
我在处理 SQL Server 2012 查询时遇到问题:
如果指定了 SELECT DISTINCT,则错误 ORDER BY 项目必须出现在选择列表中
请问这个问题怎么解决?
在我的解决方案中,我在 DkFeatureName 中重复了更多功能,因此我只需要选择不同的。
功能,这将防止重复列。
create table #nonparametricdata
(
PART_ID nvarchar(50) ,
CompanyName nvarchar(50),
PartNumber nvarchar(50),
DKFeatureName nvarchar(100),
Tempvalue nvarchar(50),
StatusId int,
DisplayOrder int,
FlagAllow bit
)
insert into #nonparametricdata
values
('1222','Honda','silicon','package','15.50Am',3,4,0),
('1900','MERCEIS','GLASS','family','90.00Am',2,3,1),
('5000','TOYOTA','alominia','source','70.20kg',3,5,0),
('8000','MACDA','motor','parametric','50.40kg',2,1,1),
('8900','JEB','mirror','noparametric','75.35kg',2,6,0),
('8000','MACDA','motor','parametric','50.40kg',2,2,1)
DECLARE @Header NVARCHAR(MAX)
SELECT
@Header = STUFF(
(
SELECT distinct ', ' + case when A.splitFlag = 1 then ''''+A.DKFeatureName +''' as '''+A.DKFeatureName+''','''+ A.DKFeatureName + 'Units' +''' as ''' + A.DKFeatureName +'Units' +'''' else ''''+A.DKFeatureName +''' as ''' + A.DKFeatureName +'''' end
FROM #FinalTable A
where StatusId=2
ORDER BY DisplayOrder
FOR XML PATH ('')
),1,2,''
)
SELECT @Header
【问题讨论】:
-
能否请您出示您的预期结果。
-
您的示例 SQL 不可执行。
#FinalTable没有定义 -
如果该列未出现在
distinct的选择列表中,这可能意味着有 2 或更多 行被压缩为单个输出行和它们可以有不同的DisplayOrder值 - 服务器非常正确地告诉你它不知道如何对这样的行进行排序。
标签: sql-server select stored-procedures sql-server-2012 dynamic-sql