当我使用UNION命令时,我收到以下错误。
" ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP或FOR XML。"
declare @results table (hdate date, name varchar(100), id1 int)
insert into @results select cast('10-01-2015' as date), 'val1 1', 1
insert into @results select cast('10-02-2015' as date), 'val2 2', 2
insert into @results select cast('10-03-2015' as date), 'thanks 1', 3
insert into @results select cast('10-04-2015' as date), 'thanks 2', 3
select (DATENAME(dw, hdate) + ', ' +
DATENAME(mm, hdate) + ' ' +
DATENAME(dd, hdate)) AS h_date, name AS h_name from @results where id1 in (1,2)
order by id1
UNION
SELECT (STUFF((
SELECT ', ' + (DATENAME(dw, hdate) + ', ' +
DATENAME(mm, hdate) + ' ' +
DATENAME(dd, hdate))
FROM @results
WHERE id1 = 3
FOR XML PATH('')
), 1, 2, '')
) AS h_date, 'Giving Day' AS h_name
答案 0 :(得分:1)
您可以尝试以下方式:
declare @results table (hdate date, name varchar(100), id1 int)
insert into @results select cast('10-01-2015' as date), 'val1 1', 1
insert into @results select cast('10-02-2015' as date), 'val2 2', 2
insert into @results select cast('10-03-2015' as date), 'thanks 1', 3
insert into @results select cast('10-04-2015' as date), 'thanks 2', 3
SELECT id1,
(DATENAME(dw, hdate) + ', ' +
DATENAME(mm, hdate) + ' ' +
DATENAME(dd, hdate)) AS h_date, name AS h_name from @results where id1 in (1,2)
UNION
SELECT DISTINCT id1,(STUFF((
SELECT ', ' + (DATENAME(dw, hdate) + ', ' +
DATENAME(mm, hdate) + ' ' +
DATENAME(dd, hdate))
FROM @results r2
WHERE r1.id1 = r2.id1
FOR XML PATH('')
), 1, 2, '')
) AS h_date, 'Giving Day' AS h_name
FROM @results r1
WHERE id1 = 3
ORDER BY id1
答案 1 :(得分:0)
如错误所示,您无法将UNDER使用ORDER BY。因此,您必须在订购之前将其包装在子查询中:
caffe
答案 2 :(得分:0)
这也有效:
declare @results table (hdate date, name varchar(100), id1 int)
insert into @results select cast('10-01-2015' as date), 'val1 1', 1
insert into @results select cast('10-02-2015' as date), 'val2 2', 2
insert into @results select cast('10-03-2015' as date), 'thanks 1', 3
insert into @results select cast('10-04-2015' as date), 'thanks 2', 3
select * FROM ( SELECT TOP 100 PERCENT (DATENAME(dw, hdate) + ', ' +
DATENAME(mm, hdate) + ' ' +
DATENAME(dd, hdate)) AS h_date, name AS h_name from @results where id1 in (1,2)
ORDER BY id1)A
UNION
select * FROM ( SELECT TOP 100 PERCENT (STUFF((
SELECT ', ' + (DATENAME(dw, hdate) + ', ' +
DATENAME(mm, hdate) + ' ' +
DATENAME(dd, hdate))
FROM @results
WHERE id1 = 3
FOR XML PATH('')
), 1, 2, '')
) AS h_date, 'Giving Day' AS h_name
) AS B