Я знаю, что цикл не идеален в SQL, но я не мог придумать другого способа сделать это.Цитирование отдельных значений из одной таблицы через другую без объединения
Я хочу каждую отдельную строку из этой таблицы 1, чтобы каждая отдельная дата и час, полученной в таблице 2.
Других словах, в таблице 2 имеет период между 05/01/2014 через 04/30/2015 , с каждой отдельной датой, имеющей 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
О, это не так уж плохо. Ну, я рад, что у тебя на вопрос ответили! – Stephan