获取给定SQL Server 2008规则的表的特定行
我有一张像这样的桌子:获取给定SQL Server 2008规则的表的特定行,sql,sql-server,sql-server-2008,sql-server-2008-r2,dynamic-sql,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,Dynamic Sql,我有一张像这样的桌子: ID NAME VAL ---------------------- 1 a1*a1 90052 2 a1*a2 236 3 a1*a3 56 4 a1*a4 6072 5 a1*a5 1004 6 a2*a2 4576 7 a2*a3 724 8 a2*a4 230 9 a2*a5 679 10 a3*a3 5 11 a3*a4 644 12 a3*a5 23423 1
ID NAME VAL
----------------------
1 a1*a1 90052
2 a1*a2 236
3 a1*a3 56
4 a1*a4 6072
5 a1*a5 1004
6 a2*a2 4576
7 a2*a3 724
8 a2*a4 230
9 a2*a5 679
10 a3*a3 5
11 a3*a4 644
12 a3*a5 23423
13 a4*a4 42354
14 a4*a5 10199
15 a5*a5 10279
给定一个给定S=5的数字,我想查询
id为1,6,10,13,15的行
它们是a1*a1、a2*a2、a3*a3、a4*a4和a5*a5
我想要一些像:
INSERT #NEW_TABLE (ID,NAME,Value) (
SELECT ordinal, NAME, VAL FROM myTable where id = 1,6,10,13,15)
得到
ID NAME VAL
----------------------
1 a1*a1 90052
2 a2*a2 4576
3 a3*a3 5
4 a4*a4 42354
5 a5*a5 10279
是否有一种方法可以为任何给定的执行此操作,可能是使用动态sql
我得到了公式,我得到了:
S=5
在一个案例或while循环中是否有这样做的方法?这在测试中很有效 您只需在
@Tab
上进行内部联接即可限制结果。您可能还想为低于3的值添加一些陷阱,我还没有这样做
基本过程是
- 声明您的@s值
- 插入前两行,因为它们始终相同
- 在循环中,每次插入一行,差异递增
- 循环运行
@s-2次后退出
S
在所有这些中代表什么?S是一个数字,它告诉不同的att的数量,在示例中,当S=5
时,我们有a1、a2、a3、a4和a5。
内部连接看起来如何?
ID formula
1 1
6 1+S
10 1+S+ (S-1)
13 1+S+ (S-1) + (S-2)
15 1+S+ (S-1) + (S-2) + (S-3)
DECLARE @Tab Table (id INT)
DECLARE @S int = 5,
@ct int
DECLARE @cur int = (1 + @S)
INSERT INTO @Tab SELECT 1
INSERT INTO @Tab SELECT (1 + @S)
SET @ct = 1
WHILE @ct <= @S - 2
BEGIN
SET @cur = @cur + (@S - @ct)
INSERT INTO @Tab SELECT @cur
SET @ct = @ct + 1
END
SELECT * FROM @Tab
ORDER BY id
SELECT ordinal, NAME, VAL
FROM myTable
WHERE id IN (SELECT id FROM @Tab)
-- OR
SELECT ordinal, NAME, VAL
FROM myTable t
INNER JOIN @tab t2
ON t2.id = t.id