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
提前谢谢你
带有 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上的演示