我正在使用SQL SERVER 2008 R2 我有表LV与结构ID(varchar),名称(varchar)和项目(int)
ID Name Item
1 xxx 5
2 yyy 9
3 rrr 11
4 hhh 19
我想插入具有相同结构但有条件的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
我怎么能在SQL上做到这一点,我在C#上使用operator modulo(%)9
提前感谢你
答案 0 :(得分:2)
Modulo具有与C#中相同的语法:http://msdn.microsoft.com/en-us/library/ms190279.aspx
您可以使用CASE
表达式来处理条件:
INSERT INTO LV_TEMP
SELECT
ID,
NAME,
Item = CASE WHEN Item > 9 THEN Item % 9 ELSE ... END --Put your logic here
FROM ....
答案 1 :(得分: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
结果:
ID Name Item
1 xxx 5
2 yyy 9
31 rrr 9
32 rrr 2
41 hhh 9
42 hhh 9
43 hhh 1
SQLFiddle上的演示
答案 2 :(得分:0)
insert into LV_TEMP
select ID, Name, (case when Item > 9 then Item / 9 else Item end) as Item
from LV