我知道循環在SQL中並不理想,但我想不出另一種方式來實現這一點。通過另一個表通過另一個表循環不同的值而不加入
我想從該表1的每個不同的行,從而具有對錶2中
產生換言之每個不同的日期和小時,表2具有通過2015年4月30日2014年5月1日之間的日期,每個不同的日期有24行,每天一個小時。我現在希望表1中每個不同的行在表2中每個不同的日期,每個24小時。
表1:
DROP TABLE Baylor_Raw..MEDICAL_SERVICE_DESC
SELECT MEDICAL_SERVICE_DESC
INTO Baylor_Raw..MEDICAL_SERVICE_DESC
FROM Baylor_Raw..Raw_ADT
WHERE MEDICAL_SERVICE_DESC IS NOT NULL AND MEDICAL_SERVICE_DESC NOT IN ('#N/A','CANCEL','DAY SURGERY','HOSPICE','INFUSION')
表2:
DECLARE @DATE DATE
SET @DATE = '05/01/2014'
DECLARE @HOUR INT
SET @HOUR = 0
DROP TABLE Baylor_Raw..DateTable
CREATE TABLE Baylor_Raw..DateTable
(DATE_OF_DISCHARGE DATE
,HOUR_OF_DISCHARGE INT)
WHILE @DATE<'05/01/2015' BEGIN
WHILE @HOUR<25 BEGIN
INSERT INTO Baylor_Raw..DateTable (DATE_OF_DISCHARGE,HOUR_OF_DISCHARGE)
VALUES (@DATE,@HOUR)
SET @HOUR = @HOUR+1
END
SET @DATE = DATEADD(DD,1,@DATE)
SET @HOUR = 0
END
這下面嘗試沒有工作。運行時間超過幾分鐘後,我取消了。
DECLARE @MEDICAL_SERVICE_DESC NVARCHAR(255)
SET @MEDICAL_SERVICE_DESC = (SELECT MIN(MEDICAL_SERVICE_DESC) FROM Baylor_Raw..MEDICAL_SERVICE_DESC)
DECLARE @DATE DATE
SET @DATE = '05/01/2014'
DECLARE @HOUR INT
SET @HOUR = 0
DROP TABLE Baylor_Raw..DateTable
CREATE TABLE Baylor_Raw..DateTable
(MEDICAL_SERVICE_DESC NVARCHAR,
DATE_OF_DISCHARGE DATE
,HOUR_OF_DISCHARGE INT)
WHILE @MEDICAL_SERVICE_DESC IS NOT NULL BEGIN
WHILE @DATE<'05/01/2015' BEGIN
WHILE @HOUR<25 BEGIN
INSERT INTO Baylor_Raw..DateTable (MEDICAL_SERVICE_DESC,DATE_OF_DISCHARGE,HOUR_OF_DISCHARGE)
VALUES (@MEDICAL_SERVICE_DESC,@DATE,@HOUR)
SET @HOUR = @HOUR+1
END
SET @DATE = DATEADD(DD,1,@DATE)
SET @HOUR = 0
END
DELETE FROM Baylor_Raw..MEDICAL_SERVICE_DESC WHERE MEDICAL_SERVICE_DESC = @MEDICAL_SERVICE_DESC
SET @MEDICAL_SERVICE_DESC = (SELECT MIN(MEDICAL_SERVICE_DESC) FROM Baylor_Raw..MEDICAL_SERVICE_DESC)
SET @DATE = '05/01/2014'
END
我現在就告訴你,我認爲你沒有正確接近這個。嘗試用文字解釋你正在試圖達到什麼樣的表格?然後提供一些基本的輸入和輸出樣本數據。我敢打賭,沒有循環就有更簡單的方法來做到這一點。 – Stephan
我同意。但是,我只需要創建這個表格,這就是爲什麼我使用循環就足夠了。 – Nikolas
哦,這並不壞。那麼,我很高興thorsten得到你的問題回答! – Stephan