2016-04-14 12 views
1

"Hasta Günleri" veya hastaları (csn_id) izleyen ve aynı gün içinde ayrılan bir sorgum var. Bu iki şekilden biriyle MS-SQL'de sütun geçersiz hatası

  1. itiraf ve ben deyimi ile benim Group eklendi kadar 6

Her şey iyi görünüyordu olay türüyle 1

  • otomatik Aynı gün taburcu bir olay türüyle deşarj olur. Aynı "Msg 8120" mesajını alan diğer soru mesajlarını okudum ama bunu nasıl çözdüğümden emin değilim ve herhangi bir/tüm önerilere açığım. Bir group by yaptığınızda

    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

    nedir EFFECTIVE_TIME sütununun – Simon

    cevap

    0

    , sorgu sonuçlarında olmasına izin tek şey, grubunun kendisi veya max veya sum gibi toplamaları ya olduğunu.

    cast(adt.EFFECTIVE_TIME as date) numaralı ürün grubunu gruplandırıyorsunuz, ancak yazdığınız sorgu format(adt.EFFECTIVE_TIME,'M/d/yyyy') - mantıksal olarak eşdeğer olabilir, ancak aynı şey değil, SQL Server size bunun iyi olmadığını söyleyecektir. İçeri format(adt.EFFECTIVE_TIME,'M/d/yyyy') koyabilirsiniz

    senin group by veya muhtemelen sonucunu biçimlendirmek için, sonra sorguya tarih koymak bir dış sorgusu ile bu kaydırmak için olurdu daha iyi olacağını: tip

    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

    Harika bir açıklama - Format hile yaptı Joe - Teşekkürler! Dış sorguda size katılıyorum ama çok fazla meraklı değilim ve çok fazla deneyimim olmadı. Bu işe yarıyor, ben de onunla koşuyorum. Tekrar teşekkürler! –

    İlgili konular