SQL Как правильно реализовать конструкцию IF ELSE?
IF ((SELECT since FROM temp_table) IS NULL)
THEN (SELECT 1)
ELSE (SELECT 2)
Если в строке значение since IS NULL, то нужно посчитать максимум pdate для каждого cid, иначе нужно посчитать максимум since для каждого cid. Сейчас по отдельности запросы отрабатывают как надо, но если для одного cid в разных строках таблицы срабатывает условия since IS NULL, GETDATE() between since and upto. Тогда в обе таблицы попадает cid, а должно только в таблицу со 2 условием. Как лучше реализовать?
SELECT 1
SELECT
cid,
max(pdate) AS pdate
INTO dbo.temp_table_max_pdate_not_open_retail
FROM
temp_table
WHERE
since IS NULL
GROUP BY
cid
END
SELECT 2
SELECT
cid,
max(since) AS since
INTO
dbo.temp_table_max_open_retail
FROM
temp_table
WHERE
GETDATE() between since and upto
GROUP BY cid
END
Ответы (2 шт):
Посмотрите на функцию Exists в sql server
IF Exists(
SELECT
since
FROM temp_table)
BEGIN
SELECT
cid,
max(since) AS since
INTO
dbo.temp_table_max_open_retail
FROM
temp_table
WHERE
GETDATE() between since and upto
GROUP BY cid;
SELECT * FROM dbo.temp_table_max_open_retail;
END
ELSE
BEGIN
SELECT
cid,
max(pdate) AS pdate
INTO dbo.temp_table_max_pdate_not_open_retail
FROM
temp_table
WHERE
since IS NULL
GROUP BY
cid
SELECT * FROM dbo.temp_table_max_pdate_not_open_retail;
END
В условии IF у вас просто проверка на наличие записей в целом в таблице temp_table если хоть одна запись есть то значение select cid from temp_table уже не будет = null
правильно ли я понимаю, что в зависимости от значение поля since в каждой строке таблицы temp_table вы хотите применить два разных вычисления?
если да, то я бы остановился на курсоре, хотя, возможно, специлаисты подскажут более эффективную маханику.
И akina прав - у вас в двух наборах два разных поля с виичинами (мах) - обратите внимание при обработке результатов т.к. фактически это разные велиины и в одно поле их группировать не следует. возможно лушче будет потом сделать выборку из этих двух таблиц и раскинуть на три поля. в таком случае можно сделать что-то типа select table1.field1, table1.field2, '' as field3 from table 1 union select table2.field1, '' as field2, '' as table2.field3 from table 2 where field1 not in (select field1 from table1) такая конструкция примерно