2016-04-14 9 views
1

「Patient Days」または同じ日に退院する患者(csn_id)を追跡しているクエリがあります。これは2つの方法のいずれか MS-SQLの列の無効なエラー

  1. 認めると私は文で私のグループを追加するまで、6

すべてが良い見えたイベントタイプと1

  • 自動同じ日放電のイベントタイプに放電して起こります。私は同じ "メッセージ8120"を受け取った他の質問の記事を読んだが、私はこれをどのように解決しているのか分かりませんし、任意の/すべての提案に公開しています。あなたがgroup byを行うと

    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

    は、クエリ結果に持つことが許されている唯一のものはグループ自体、またはmaxまたはsumなどの集計のいずれかです。

    cast(adt.EFFECTIVE_TIME as date)でグループ化していますが、クエリにはformat(adt.EFFECTIVE_TIME,'M/d/yyyy')が含まれていますが、これらは論理的には同等かもしれませんが、それらは同じではないため、SQL Serverはそれがいいとは言いません。

    あなたgroup byformat(adt.EFFECTIVE_TIME,'M/d/yyyy')を置くことができ、または何おそらく良いだろうことはあなたの結果をフォーマットするために外側のクエリであることをラップ、その後、クエリに日付を入れて次のようになります。

    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

    偉大な説明 - 形式はトリックジョーをした - ありがとう! 私は外側のクエリに同意しますが、私はそれらに精通しておらず、多くの経験を持っていません。これはうまくいくようですが、私はそれを実行しています。再度、感謝します! –

    関連する問題