如何在sql中使用Stuff使用order by子句

时间:2015-08-28 04:58:13

标签: sql-server

stuff(( select distinct  ',',Convert(varchar(256),y.RoomPlanID)
from(
    select  x.RoomPlanID ,x.RoomPlanHierarchy from (select  utblConfigDestRoomRates.RoomPlanID,utblMstRoomPlans.RoomPlanHierarchy
                            FROM utblConfigDestRoomRates inner
                            JOIN utblMstRoomPlans on utblConfigDestRoomRates.RoomPlanID=utblMstRoomPlans.RoomPlanId
                            WHERE PropertyTypeID=1
                            AND BusinessID='AAAA' 
                            AND('25-Aug-2015' BETWEEN DateEffective AND DateEnd) 
                            AND StarRank=3     group by RoomPlanHierarchy order by RoomPlanHierarchy asc
                            ) x
                             --order by
                             -- x.RoomPlanHierarchy
                              )y 
                            FOR XML PATH('')), 1, 1, '')

2 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER(Transact-SQL)函数。我假设x.4RoomPlanHierarchy的顺序就像这样

stuff(( select distinct  ',',Convert(varchar(256),y.RoomPlanID)
from(
    select  x.RoomPlanID ,x.RoomPlanHierarchy,ROW_NUMBER() OVER(ORDER BY x.RoomPlanHierarchy asc) AS Row from (select  utblConfigDestRoomRates.RoomPlanID,utblMstRoomPlans.RoomPlanHierarchy
                            FROM utblConfigDestRoomRates inner
                            JOIN utblMstRoomPlans on utblConfigDestRoomRates.RoomPlanID=utblMstRoomPlans.RoomPlanId
                            WHERE PropertyTypeID=1
                            AND BusinessID='AAAA' 
                            AND('25-Aug-2015' BETWEEN DateEffective AND DateEnd) 
                            AND StarRank=3     group by RoomPlanHierarchy 
                            ) x
                             --order by
                             -- x.RoomPlanHierarchy
                              )y 
                            FOR XML PATH('')), 1, 1, '')

答案 1 :(得分:-2)

--用SQL格式化

 (
SELECT
     stuff(
     (
SELECT
            '' + a.col_name ,
           '' + Replace(CAST(a.pos as VARCHAR), a.pos, '') + '"' 
        FROM
             (
              SELECT
                     CAST (',' + db_column_name + ' AS "' + REPLACE(label_tag, '.', '_') AS nvarchar (4000) ) AS col_name,
                     row_number() over (partition BY RIGHT(entity, CHARINDEX('.', (REVERSE(entity)) ) - 1) ORDER BY db_column_name) AS pos
                FROM
                     table1 AS ex
                JOIN
                     table2 AS ef
                  ON
                     ef.col1 = ex.col1
               WHERE
                     entity LIKE '%string%')a FOR xml path('')) , 1, 1, '' ) )