2016-04-14 94 views
1

我有一個查詢正在跟蹤「患者日」或進入和離開當天的患者(csn_id)。這發生在以下兩種方式之一MS-SQL中的列無效錯誤

  1. 承認並與1
  2. 自動當天排出的與事件類型的事件類型放電6

一切都看起來很不錯,直到我說我集團By語句。我已閱讀收到相同的「消息8120」的其他問題的帖子,但我不知道我是如何解決這個問題,並開放給任何/所有的建議。

SELECT 
'1,*'+char(13)+char(10) 
+'80,1006057'+char(13)+char(10) 
+'100,10'+char(13)+char(10) 
+'2405,'+cast(count(distinct adt.PAT_ENC_CSN_ID) as varchar(18))+char(13)+char(10) --Census events --as varchar(10) 
+'2420,'+format(adt.EFFECTIVE_TIME,'M/d/yyyy') --as efftime 
FROM CLARITY_ADT adt 
inner join PAT_ENC_HSP hsp on adt.PAT_ENC_CSN_ID=hsp.PAT_ENC_CSN_ID 
WHERE adt.EVENT_SUBTYPE_C <>2 AND --no canelled events 
     datediff(day,adt.EFFECTIVE_TIME,cast(CURRENT_TIMESTAMP as date)) between 1 and 7 AND 

    ((adt.EVENT_TYPE_C ='6' AND 
    adt.DEPARTMENT_ID in ('101000020', '101000021', '101000013', '101000014', '101000002', 
         '101000018', '101000003', '101000114', '101000005', '101000017', 
         '101000006', '101000118', '101000007', '101000016', '101000004', 
         '101000009', '101000010', '101000011', '101000022', '101000023', 
         '101000012')) OR 
    (cast(hsp.HOSP_ADMSN_TIME as date) = cast(hsp.HOSP_DISCH_TIME as date) AND 
    adt.EVENT_TYPE_C ='1' AND 
    adt.DEPARTMENT_ID in ('101000020', '101000021', '101000013', '101000014', '101000002', 
         '101000018', '101000003', '101000114', '101000005', '101000017', 
         '101000006', '101000118', '101000007', '101000016', '101000004', 
         '101000009', '101000010', '101000011', '101000022', '101000023', 
         '101000012'))) 

group by cast(adt.EFFECTIVE_TIME as date) 
order by cast(adt.EFFECTIVE_TIME as date) 
+0

什麼類型EFFECTIVE_TIME專欄? – Simon

回答

0

當你做一個group by,你被允許在查詢結果的唯一事情就是要麼組本身,還是喜歡maxsum聚合。

您正在按cast(adt.EFFECTIVE_TIME as date)進行分組,但您的查詢包含format(adt.EFFECTIVE_TIME,'M/d/yyyy') - 雖然這些在邏輯上可能相同,但它們並不相同,因此SQL Server會告訴您它不好。

你可以把format(adt.EFFECTIVE_TIME,'M/d/yyyy')group by,或者什麼可能會更好,將是把日期到查詢,然後換行與外部查詢格式化你的結果:

select 
    '1,*'+char(13)+char(10) 
    +'80,1006057'+char(13)+char(10) 
    +'100,10'+char(13)+char(10) 
    +'2405,'+cast(num_records as varchar(18))+char(13)+char(10) --Census events --as varchar(10) 
    +'2420,'+format(the_date,'M/d/yyyy') --as efftime 
from 
(
    select 
     cast(adt.EFFECTIVE_TIME as date) [the_date] 
     ,count(distinct adt.PAT_ENC_CSN_ID) [num_records] 
    FROM CLARITY_ADT adt 
    WHERE ... /* where and join clauses */ 
    group by cast(adt.EFFECTIVE_TIME as date) 
) x 
order by x.the_date; 
+0

偉大的解釋 - 格式做了詭計喬 - 謝謝! 我同意你的外部查詢,但我對這些並不很瞭解,並沒有很多經驗。這似乎工作,所以我正在運行它。再次感謝! –