【问题标题】:TSQL: Howto add a char to a select statementTSQL:如何将字符添加到选择语句
【发布时间】:2010-10-03 19:20:49
【问题描述】:

我有以下说法

SELECT id, descr from mytable 

返回

1,“测试1”
4、'Test4'
6、'Test6'
8、'Test8'
22, 'Test22'

现在我希望显示在前 4 个结果中添加一个连续字符...

'A', 1, 'Test1'
'B', 4, 'Test4'
'C', 6, 'Test6'
'D', 8, 'Test8'
'',22, 'Test22'

想法?

编辑:如果可能,希望使用 SQL Server 2000 示例。

【问题讨论】:

  • 在 SQL Server 2000 中怎么样?

标签: sql sql-server tsql sql-server-2000 row-number


【解决方案1】:
SELECT CASE WHEN ROWNUMBER < 4
           THEN CHAR(65 + ROWNUMBER - 1)
           ELSE ''
       AS <WHATEVER>
       ,X.id
       ,X.descr
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY <WHATEVER>) AS ROWNUMBER
        ,id
        ,descr
    FROM mytable
) AS X

这在 SQL Server 2005 及更高版本中。

在 SQL Server 2000 中(假设 id 是您的排序顺序并且是唯一的):

SELECT CASE WHEN rownumbers.rownumber < 4
           THEN CHAR(65 + rownumbers.rownumber - 1)
           ELSE ''
       AS <WHATEVER>
       ,mytable.id
       ,mytable.descr
FROM (
    SELECT l.id, COUNT(*) AS rownumber
    FROM mytable AS l
    LEFT JOIN mytable AS r
        ON l.id >= r.id
    GROUP BY l.id
) AS rownumbers
INNER JOIN mytable
    ON mytable.id = rownumbers.id

【讨论】:

  • 在 SQL Server 2000 中怎么样?
  • 在 SQL Server 2000 中有几种方法可以对此进行蒙皮 - 三角形连接方法是我在这里选择的方法。
  • 这看起来会起作用,但 id 是唯一的,但不是排序顺序。我猜我使用一个人为的例子得到了什么。 :)
  • 谢谢。在这个答案和 Ted 的答案之间,我让它工作得很好。
【解决方案2】:

您不能在 SQL Server 2000 中的单个 select 语句中执行此操作。SQL Server 2000 没有 ROWNUM 语句。

如果你想使用临时表,你可以使用 IDENTITY 函数。

SELECT IDENTITY(int,1,1) rownum, 
       id, 
       descr 
INTO #mytable 
from mytable

SELECT CASE WHEN ROWNUMBER < 4
       THEN CHAR(65 + ROWNUMBER - 1)
       ELSE ''
   AS <WHATEVER>
   ,X.id
   ,X.descr
FROM #mytable X
ORDER BY rownum

注意:IDENTITY 函数只能在 SELECT INTO 语句中使用。

【讨论】:

  • 我猜你可以在一个语句中完成,看起来 Cade 的 SQL 2000 解决方案可能有效。
  • 感谢您的回答。我最终使用了 75% 的凯德和 25% 的你的解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多