虽然SQL中的循环不起作用 [英] While loop in SQL not working

查看:73
本文介绍了虽然SQL中的循环不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

表1:



Table1:

customer_id	dept_id	level_id	event_group
222		300300	UltraSound1	NULL
222		300300	UltraSound1	NULL
222		300300	Lab		NULL
222		300300	Lab		NULL
222		300300	UltraSound2	NULL
222		300300	UltraSound2	NULL
222		300300	UltraSound2	NULL
444		400400	Intensive Care	NULL
444		400400	UltraSound4	NULL
444		400400	UltraSound5	NULL
444		400400	UltraSound6	NULL
444		400400	Cardiology	NULL
444		400400	Cardiology	NULL
444		400400	UltraSound4	NULL
444		400400	UltraSound4	NULL
444		400400	Xray		NULL







想输出如下:






Would like output as follow:

customer_id	dept_id	level_id	event_group
222		300300	UltraSound1	Group1
222		300300	UltraSound1	Group1
222		300300	Lab		NULL
222		300300	Lab		NULL
222		300300	UltraSound2	Group3
222		300300	UltraSound2	Group3
222		300300	UltraSound2	Group3
444		400400	Intensive Care	NULL
444		400400	UltraSound4	Group5
444		400400	UltraSound5	Group5
444		400400	UltraSound6	Group5
444		400400	Cardiology	NULL
444		400400	Cardiology	NULL
444		400400	UltraSound4	Group7
444		400400	UltraSound4	Group7
444		400400	Xray		NULL





我尝试过:



这是我试图尝试的但它运行不正常.....


DECLARE @TOTAL AS INT


IF OBJECT_ID('TEMPDB..#TEMP1') IS NOT NULL
DROP TABLE #TEMP1;

SELECT A.*, ROW_NUMBER() OVER (ORDER BY CUSTOMER_ID) AS ROWID
INTO #TEMP1
  FROM Table1 A

SELECT @TOTAL = COUNT(*) FROM #TEMP1

DECLARE @COUNTER AS INT, @VAL AS INT
SET @COUNTER = 1
SET @VAL = 1

DECLARE @CURRENTVAL AS VARCHAR(255)
DECLARE @CURRENTCUSTOMER AS VARCHAR(255)
DECLARE @CURRENTCUSTOMERENCOUNTER AS VARCHAR(255)
DECLARE @COMPAREVAL AS VARCHAR(255)

WHILE (@COUNTER <= @TOTAL)
  BEGIN
    -- GET ROW FROM #TEMP1
    SELECT @CURRENTCUSTOMER = CUSTOMER_ID, @CURRENTVAL = LEVEL_ID, @CURRENTCUSTOMERDEPT = DEPT_ID FROM #TEMP1 WHERE ROWID = @COUNTER
      
      IF (@CURRENTVAL LIKE '%UltraSound%')
 	     UPDATE
             [Table1] SET EVENT_GROUP = 'Group'+CAST(@VAL AS VARCHAR(10)) WHERE  CUSTOMER_ID = @CURRENTCUSTOMER AND DEPT_ID = @CURRENTCUSTOMERDEPT AND LEVEL_ID = @CURRENTVAL
    ELSE  SET @VAL = @VAL + 1

  SET @COUNTER = @COUNTER + 1
END







这是我运行此代码后得到的(这是错误的) )






this is what I got after running this code (it is wrong)

customer_id	dept_id	level_id	event_group
222		300300	UltraSound1	Group1
222		300300	UltraSound1	Group1
222		300300	Lab		NULL
222		300300	Lab		NULL
222		300300	UltraSound2	Group3
222		300300	UltraSound2	Group3
222		300300	UltraSound2	Group3
444		400400	Intensive Care	NULL
444		400400	UltraSound4	Group6
444		400400	UltraSound5	Group4
444		400400	UltraSound6	Group4
444		400400	Cardiology	NULL
444		400400	Cardiology	NULL
444		400400	UltraSound4	Group6
444		400400	UltraSound4	Group6
444		400400	Xray		NULL

推荐答案

1)从SOURCE GROUP BY中选择level_id level_id

2)加入SOURCE和Group+ ROWNUMBER()来自(1)



然后是NULL的东西。
1) Select level_id from SOURCE GROUP BY level_id
2) Join SOURCE and "Group" + ROWNUMBER() from (1)

Then the NULL thing.


DECLARE  @TotalRows INT, @CurrentRow INT 
DECLARE  @TransID INT

IF OBJECT_ID('tempdb..#QcAccounts') IS NOT NULL
    DROP TABLE #QcAccounts

create table #QcAccounts
( 
	RowID INT IDENTITY ( 1 , 1 ), 
	TransID INT
) 
INSERT #QcAccounts 
SELECT TransID FROM AgentTransaction 
     
SET @TotalRows = @@ROWCOUNT 
SET @CurrentRow = 1 
     
WHILE (@CurrentRow <= @TotalRows) 
BEGIN 
		SELECT @TransID = TransID 
		FROM   #QcAccounts 
		WHERE  RowID = @CurrentRow 

		print @TransID
		----------------------------------QcTransaction--------------------------------------------------------
		IF NOT EXISTS ( SELECT TransID FROM QcTransaction WHERE TransID = @TransID )
		BEGIN
			INSERT INTO QcTransaction(TransID,AllotedDate) VALUES(@TransID,getdate())
			--UPDATE AgentTransaction SET AuditStatusID = dbo.udfGetAuditStatusID('ALT') 
			--WHERE TransID = @TransID
		END
		-------------------------------------------------------------------------------------------------------

		SET @CurrentRow = @CurrentRow + 1 
END    


这篇关于虽然SQL中的循环不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆