【问题标题】:Special SELECT in SQL [closed]SQL中的特殊SELECT [关闭]
【发布时间】:2018-10-23 07:28:36
【问题描述】:

我有一些这样的号码:

1422
1323
4343
2343
and etc.

我想在 SQL Server 中使用 SELECT 子句来获取这些数字,如下所示:

-----------
ColumnName |
-----------
1422       |
-----------
1323       |
-----------
4343       |
-----------
2343       |
-----------

【问题讨论】:

  • 该查询遵循什么顺序?我的意思是,1422 >1323,但 13232343。说明你想要什么样的查询或你打算得到什么样的查询!
  • 好的。逻辑是什么?

标签: sql sql-server tsql select


【解决方案1】:

我不是问你为什么需要这个,但你可以在ORDER BY 子句中使用条件排序。像这样的:

DECLARE @DataSource TABLE
(
    [value] INT
);

INSERT INTO @DataSource ([value])
VALUES (1422)
      ,(1323)
      ,(4343)
      ,(2343);

SELECT [value]
FROM @DataSource
ORDER BY CASE [value] 
              WHEN 1422 THEN 1
              WHEN 1323 THEN 2
              WHEN 4343 THEN 3
              WHEN 2343 THEN 4
        END;

在您的真实数据中,您可能希望提前计算排序值。例如使用UPDATE 语句并设置如何对值组进行排序。您也可以添加更多 CASE WHEN 语句。

【讨论】:

    【解决方案2】:

    试试这个

    DECLARE @data nvarchar(max)='1422, 1323, 4343, 2343,4515,7898,4784,4775,4115'
    
    DECLARE @Tempdata AS TABLE (data nvarchar(max))
    INSERT INTO @Tempdata
    SELECT @data
    SELECT LTRIM(Split.a.value('.','nvarchar(100)')) AS data
    FROM(
    SELECT CAST('<S>'+ REPLACE(data,',','</S><S>')+'</S>' AS XML) AS data 
    FROM @Tempdata 
    ) AS A
    CROSS APPLY data.nodes('S') AS Split (a)
    

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2021-12-27
      • 2010-11-08
      • 2013-05-14
      相关资源
      最近更新 更多