ColumnName IsOrdered Seq_ID
ABC 2 2
DEF 1 1
GHI 0 NULL
JKL 1 4
MNO 1 3
PQR 0 5
我在数据库中有一个表(table1),其中存储了以上值。
注意: -
予。 Is_Ordered列:2 - >说明; 1 - > ASC; 0 - >默认值。
II。 Seq_ID列:列名称按顺序排列
这些值由用户存储在上表中(即在用户界面上)。我想从多行生成一个'order by'子句到一个带有逗号','分隔(单个列)的语句。
例如:从表1中选择*由DEF asc,ABC desc,MNO asc,JKL asc
这里我想编写一个sql语句来生成如上所示的order by语句i.e. (order by DEF asc, ABC desc, MNO asc, JKL asc)
在这里,您会注意到GHI列和PQR列未包含在内,因为这两个列未按用户界面中的选择顺序选择。
我事先感谢你试图理解我的问题并为此提供了适当的解决方案。
答案 0 :(得分:1)
希望这有帮助
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)
答案 1 :(得分: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)