带有if条件的SQL插入

use*_*628 5 sql modulo sql-server-2008-r2

即时通讯使用SQL SERVER 2008 R2我有表LV与结构ID(varchar),名称(varchar)和项目(int)

ID  Name Item
1   xxx  5
2   yyy  9
3   rrr  11
4   hhh  19
Run Code Online (Sandbox Code Playgroud)

我想插入表LV_TEMP具有相同的结构,但条件>当项> 9然后我必须除9

什么预期表LV_TEMP

ID   Name Item
1    xxx  5
2    yyy  9
31   rrr  9
32   rrr  2
41   hhh  9
42   hhh  9
43   hhh  1
Run Code Online (Sandbox Code Playgroud)

我怎么能在SQL上做到这一点,我在C#上使用运算符modulo(%)9

提前谢谢你

Ale*_*nko 1

带有 master..spt_values 系统表和APPLY()运算符的选项

IF OBJECT_ID('tempdb.dbo.#LV_TEMP') IS NOT NULL DROP TABLE dbo.#LV_TEMP
SELECT CASE WHEN t.Item > 9 THEN (t.ID * 10) + ROW_NUMBER() OVER(PARTITION BY ID ORDER BY (SELECT 1)) ELSE t.ID END AS ID,
       t.Name, 
       CASE WHEN o.Number != (t.Item / 9) THEN 9 ELSE Item % 9 END AS Item
INTO #LV_TEMP
FROM dbo.test21 t CROSS APPLY(
                              SELECT v.Number
                              FROM master..spt_values v
                              WHERE v.type = 'P' 
                                AND v.number < (CASE WHEN t.Item > 9 THEN (t.Item / 9) + 1 ELSE 1 END)
                              ) o

SELECT *
FROM #LV_TEMP  
Run Code Online (Sandbox Code Playgroud)

结果:

ID  Name Item


1   xxx 5
2   yyy 9
31  rrr 9
32  rrr 2
41  hhh 9
42  hhh 9
43  hhh 1 
Run Code Online (Sandbox Code Playgroud)

SQLFiddle上的演示