已知一张表,结构如下所示:
create table tb222
(
num int identity(1,1) primary key,
qty1 int default 0,
qty2 int default 0,
qty3 int default 0,
qty int
)
insert into tb222(qty)
select 5
union all
select 3
union all
select 8
表内容如下:
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 0 0 0 5
2 0 0 0 3
3 0 0 0 8(影響 3 個資料列)
现在我想把qty中的值随机分配到qty1,qty2,qty3中的一个
即想要的记过为:
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 0 5 0 5
2 0 0 3 3
3 0 8 0 8
注意:表中可能有几千笔记录.不可能对每笔记录使用update进行逐条更新.
create table tb222
(
num int identity(1,1) primary key,
qty1 int default 0,
qty2 int default 0,
qty3 int default 0,
qty int
)
insert into tb222(qty)
select 5
union all
select 3
union all
select 8
表内容如下:
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 0 0 0 5
2 0 0 0 3
3 0 0 0 8(影響 3 個資料列)
现在我想把qty中的值随机分配到qty1,qty2,qty3中的一个
即想要的记过为:
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 0 5 0 5
2 0 0 3 3
3 0 8 0 8
注意:表中可能有几千笔记录.不可能对每笔记录使用update进行逐条更新.
解决方案 »
- 这个插入超级有难度,已经有朋友解决一部分了。
- 各位大师请帮帮小弟解决一下数据库字段问题!
- 纯C++下如何连接SQL Server Campact 3.5数据库
- sql server存储过程两个变量的比较
- 求救!!!!SQLSERVER安装问题
- SQL SERVER2005收缩
- 怎样在SQL语句里连接其它服务器上的数据库(通过TCP/IP)?很急在线等解决立给分
- 用数据窗口对表进行操作的时候除了增加以外,update和delete都显示错误,"rowRow changed between retrieve and update."
- 金额转人民币面值过程。 高手勿进,,免得浪费时间:)
- 奇难无比的sql语句,没有人会吗???
- 怎么求出按一定时间间隔(比如秒)的最高和最低值?
- CONVERT能输出jun 13 2009这样的格式不?
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (num INT,qty1 INT,qty2 INT,qty3 INT,qty INT)
INSERT INTO @T
SELECT 1,0,0,0,5 UNION ALL
SELECT 2,0,0,0,3 UNION ALL
SELECT 3,0,0,0,8--SQL查询如下:;WITH Liang AS
(
SELECT num,qty1,qty2,qty3,qty,
rnd=ABS(CHECKSUM(NEWID()))%3+1
FROM @T
)
UPDATE Liang SET
qty1=CASE WHEN rnd=1 THEN qty ELSE qty1 END,
qty2=CASE WHEN rnd=2 THEN qty ELSE qty2 END,
qty3=CASE WHEN rnd=3 THEN qty ELSE qty3 END
SELECT * FROM @T/*
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 0 0 5 5
2 3 0 0 3
3 8 0 0 8(3 行受影响)
*/
请问这段sql脚本代码是在sqlserver2005还是2000上运行的?我直接COPY到我2000的查询分析器中执行,系统提示我关键字"with"附近的语法错误.why?
DECLARE @T TABLE (num INT,qty1 INT,qty2 INT,qty3 INT,qty INT)
INSERT INTO @T
SELECT 1,0,0,0,5 UNION ALL
SELECT 2,0,0,0,3 UNION ALL
SELECT 3,0,0,0,8--SQL查询如下:UPDATE Liang SET
qty1=CASE WHEN rnd=1 THEN qty ELSE qty1 END,
qty2=CASE WHEN rnd=2 THEN qty ELSE qty2 END,
qty3=CASE WHEN rnd=3 THEN qty ELSE qty3 END
FROM
(
SELECT num,qty1,qty2,qty3,qty,
rnd=ABS(CHECKSUM(NEWID()))%3+1
FROM @T
) LiangSELECT * FROM @T
/*
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 5 0 0 5
2 0 0 3 3
3 0 8 0 8(3 行受影响)
*/
--> 生成测试数据: @T
DECLARE @T TABLE (num INT,qty1 INT,qty2 INT,qty3 INT,qty INT)
INSERT INTO @T
SELECT 1,0,0,0,5 UNION ALL
SELECT 2,0,0,0,3 UNION ALL
SELECT 3,0,0,0,8--SQL查询如下:UPDATE Liang SET
qty1=CASE WHEN rnd=1 THEN qty ELSE qty1 END,
qty2=CASE WHEN rnd=2 THEN qty ELSE qty2 END,
qty3=CASE WHEN rnd=3 THEN qty ELSE qty3 END
FROM
(
SELECT num,qty1,qty2,qty3,qty,
rnd=ABS(CHECKSUM(NEWID()))%3+1
FROM @T
) LiangSELECT * FROM @T
/*
num qty1 qty2 qty3 qty
----------- ----------- ----------- ----------- -----------
1 5 0 0 5
2 0 0 3 3
3 0 8 0 8(3 行受影响)
*/