簡體   English   中英

如何在T-sql中使用逗號分隔的1列值或sql語句中生成多行

[英]how to produce multiple rows into 1 column value or sql statement with comma seperated in T-sql

ColumnName  IsOrdered    Seq_ID
ABC          2              2
DEF          1              1
GHI          0             NULL
JKL          1              4
MNO          1              3
PQR          0              5

我在數據庫中有一個表(table1),其中存儲了以上值。

注意: -

I. Is_Ordered專欄 :2 - > Desc; 1 - > Asc; 0 - >默認。

II。 Seq_ID列 :列名稱'順序'序列

這些值由用戶存儲在上表中(即在用戶界面上)。 我想從多行生成一個'order by'子句到一個帶逗號','分隔(單個列)的語句。

例如:從表1中選擇*由DEF asc,ABC desc,MNO asc,JKL asc

這里我想編寫一個sql語句來生成如上所示的order by語句, ie (order by DEF asc, ABC desc, MNO asc, JKL asc)

在這里,您將注意到GHI列和PQR列未包括在內,因為這兩個列未按用戶界面中的選擇順序選擇。

我事先感謝你試圖理解我的問題並給出了適當的解決方案。

希望這可以幫助

DECLARE @OrderBySetting VARCHAR(max) = ''
DECLARE @OrderByString VARCHAR(max) = ''

DECLARE MY_CURSOR CURSOR
FOR  SELECT  ColumnName + ' ' + 
case IsOrdered  
    WHEN 1 THEN 'ASC'
    WHEN 2 THEN 'DESC'
    END
    + ','
FROM         Table1
WHERE     (IsOrdered <> 0)
ORDER BY Seq_ID DESC

OPEN My_Cursor 

Fetch NEXT FROM MY_Cursor INTO @OrderBySetting

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @OrderByString = @OrderBySetting + @OrderByString


FETCH NEXT FROM MY_Cursor INTO @OrderBySetting
END
CLOSE MY_Cursor
DEALLOCATE MY_Cursor

SET @OrderByString = 'SELECT * FROM TABLE1 ORDER BY ' + SUBSTRING(@OrderByString, 1, LEN(@OrderByString)-1)

你去(可能需要添加一個CAST)

SELECT
    'ORDER BY ' +
      SUBSTRING(
      (
      SELECT
          ',' + ColumnName + 
               CASE IsOrdered  
                 WHEN 1 THEN 'ASC'
                 WHEN 2 THEN 'DESC'
               END
      FROM
          MyTable
      WHERE
          IsOrdered > 0 -- why have "IsIncluded" column ?
      ORDER BY
          Seq_ID
      FOR XML PATH ('')
      )
      , 2, 7999)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM