2014-09-18 2 views
-1

Мне нужно основать результат из моего кода на дату. Я хочу использовать временную таблицу и оператор case, но это, похоже, не работает. Я использую SQL 2012 благодаряcase case с использованием таблицы temp

if object_id('tempdb..#abc') is not null drop table #abc 
create table #abc (abc varchar(25) 
     , codetype varchar (25) 
         ) 
    Insert into #abc select 253.2, 'abc9' 
    Insert into #abc select 428.41, 'abc10' 

select pat.id 
, edg.CODE 
, case when DATE > '9/1/2014' then abc.codetype = 'abc9' else abc.codetype = 'abc10' end 

from pat 
left join dx on pat.csn = dx.csn 
left join edg on dx.dx = edg.dx 
inner join #code9 as abc on abc.abc = edg.CODE 

where 
pat.DATE between '9/2/2014' and '9/2/2014' 
+2

', что, кажется, не будет working' - что значит«не работает»значит ... он выдает ошибку, ничего не делает , вспыхивает в пламя, что? – LittleBobbyTables

+1

ваш выбор не использует соблазнительный #abc вообще – radar

+1

Вы фильтруете строки, где 'DATE' всегда 9/2/2014, но ваш оператор case проверяет, есть ли дата> 9/1/2014 или нет. Разве не 9/2/2014 ** всегда ** больше, чем 9/1/2014? – Brandon

ответ

0

Есть несколько сомнительных аспектов этого кода, такие как использование between с теми же значениями, микширование левого соединения и внутренние соединения, и делает сравнение в case, который является нет- op (из-за where).

Однако задание в case является, безусловно, ошибкой. Это не допускается:

case when DATE > '9/1/2014' then abc.codetype = 'abc9' else abc.codetype = 'abc10' end 

Возможно, вы намерены:

(case when [date] > '2014-09-01' then 'abc9' else 'abc10' end) as codetype 
Смежные вопросы