gpt4 book ai didi

sql-server-2005 - 生成索引在两个数字之间的行

转载 作者:行者123 更新时间:2023-12-04 07:19:24 25 4
gpt4 key购买 nike

我有一个表 varchar, int, int 是这样的:

OS          MinSP      MaxSP
-- ----- -----
2000 4 4
XP 2 3
Vista 0 2
7 0 1

我想要的是一个将生成如下值列表的查询:

  • 2000 SP4
  • XP SP2
  • XP SP3
  • 远景
  • Vista SP1
  • Vista SP2
  • 7
  • 7 SP1

编辑

尽管在我的原始示例中 MinSP 和 MaxSP 之间的距离不超过 1,但它们可能相同或相隔不止 1。我更改了示例以进行说明。

最佳答案

你需要一个 Tally table执行以下操作,但它会打败光标并将随着发布的下一个操作系统动态增长。您的计数表也必须从零开始。

编辑:修正了一个拼写错误并添加了第二个版本

版本 1(您没有理货表):这会使用 sys.all_columns 动态生成一个数字表。有很多方法可以做到这一点,但您明白了。

;WITH    Tally(N)
AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 --minus one to make this zero based
FROM sys.all_columns C)
SELECT OS + CASE WHEN N > 0 THEN ' SP' + CAST(B.N AS char(1))
ELSE ''
END
FROM dbo.Test A
INNER JOIN Tally B ON B.N >= A.MinSp
AND B.N <= A.MaxSp

版本二(您有一个从零开始的理货表):

SELECT  OS + CASE WHEN N > 0 THEN ' SP' + CAST(B.N AS char(1))
ELSE ''
END
FROM dbo.Test A
INNER JOIN dbo.Tally B ON B.N >= A.MinSp
AND B.N <= A.MaxSp

关于sql-server-2005 - 生成索引在两个数字之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com