5

SQL SERVER 2008 R2を使用している私は、構造ID(varchar)、名前(varchar)、およびItem(int)を持つテーブルLVを持っています

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 でそれを行う方法

よろしくお願いします

4

3 に答える 3

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 ....
于 2013-03-04T10:00:39.823 に答える
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のデモ

于 2013-03-04T12:23:51.253 に答える
0
insert into LV_TEMP
     select ID, Name, (case when Item > 9 then Item / 9 else Item end) as Item
     from LV
于 2013-03-04T10:02:01.023 に答える