Sql server 对带有“ORDER BY”的查询执行“UNION”
我得到了一个语法错误在工会所有。我知道我不能这么做。有人能帮我吗Sql server 对带有“ORDER BY”的查询执行“UNION”,sql-server,Sql Server,我得到了一个语法错误在工会所有。我知道我不能这么做。有人能帮我吗 SELECT ID, date1, date2 row_number() OVER (PARTITION BY ID ORDER BY date1 DESC ) as RN1, 1 as Range FROM ( SELECT ID,date1, rn = row_number() OVER (PARTITION BY ID ORDER BY date1 ) FROM listing_History (nolock)
SELECT
ID,
date1,
date2 row_number() OVER (PARTITION BY ID ORDER BY date1 DESC ) as RN1,
1 as Range
FROM
(
SELECT ID,date1,
rn = row_number() OVER (PARTITION BY ID ORDER BY date1 )
FROM listing_History (nolock)
WHERE [date1] <= CONVERT(DATE,DATEADD(MONTH, -6, GETDATE())) AND
ID in (SELECT txt FROM [dbo].[fn_ListToTable](@listStr, ','))
) AS A ORDER BY date1 DESC, date2 DESC
UNION ALL
SELECT
ID,
Date1,
date2 row_number() OVER (PARTITION BY ID ORDER BY date1 DESC ) as RN1,
1 as Range
FROM
(
SELECT
ID,
date1,
rn = row_number() OVER (PARTITION BY ID ORDER BY date1 )
FROM listing_History (nolock)
WHERE [status_date] <= CONVERT(DATE,DATEADD(MONTH, -3, GETDATE()) -1)
AND
ID in (SELECT txt FROM [dbo].[fn_ListToTable](@listStr, ','))
) AS A ORDER BY date1 DESC,date2 desc
在最后一次选择UNION和UNION ALL时,应始终有一个订单
从每个联合中删除除最后一个外的所有ORDER BY,并确保ORDER BY中引用的列名与第一个SELECT相对应。但在执行联合之前,我需要为每个查询执行ORDER BY。您在每个SELECT的排名函数中都有ORDER BY,这样就可以了。如果你想在联合后对所有问题进行排序,那么说出来,我会给你一个新的答案。但是在执行查询之前,我需要对每个查询进行排序union@BumbleBee. 即使您按一次排序,它也会按顺序给出结果。所以我假设最后的order by不会给出正确的RN1。您也不能将order by放入子查询中。无论此查询结果的顺序如何,您将始终至少有两行,其中RN=1。
SELECT
ID,
date1,
date2 row_number() OVER (PARTITION BY ID ORDER BY date1 DESC ) as RN1,
1 as Range
FROM
(
SELECT ID,date1,
rn = row_number() OVER (PARTITION BY ID ORDER BY date1 )
FROM listing_History (nolock)
WHERE [date1] <= CONVERT(DATE,DATEADD(MONTH, -6, GETDATE()))
AND
ID in (SELECT txt FROM [dbo].[fn_ListToTable](@listStr, ','))
) AS A --ORDER BY date1 DESC, date2 DESC Remove order by from here
UNION ALL
SELECT
ID,
Date1,
date2 row_number() OVER (PARTITION BY ID ORDER BY date1 DESC ) as RN1,
1 as Range
FROM
(
SELECT ID,date1,
rn = row_number() OVER (PARTITION BY ID ORDER BY date1 )
FROM listing_History with(nolock)
WHERE [status_date] <= CONVERT(DATE,DATEADD(MONTH, -6, GETDATE()))
AND
ID in (SELECT txt FROM [dbo].[fn_ListToTable](@listStr, ','))
)AS A
ORDER BY date1 DESC, date2 DESC