我一直在研究下面的查询,并且从成员的一些见解我终于让它运行没有错误。
我现在的问题是我需要调整2013年和2012年YTD列的日期参数。 在我尝试调整YTD列之前,下面的查询工作正常。
Select CLINIC_ID,SUMMARY_CATGRY,ENTRY_TYPE,
SUM(case when EntryMonth = 1 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jan12],
SUM(case when EntryMonth = 2 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Feb12],
SUM(case when EntryMonth = 3 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Mar12],
SUM(case when EntryMonth = 4 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Apr12],
SUM(case when EntryMonth = 5 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [May12],
SUM(case when EntryMonth = 6 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jun12],
SUM(case when EntryMonth = 7 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jul12],
SUM(case when EntryMonth = 8 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Aug12],
SUM(case when EntryMonth = 9 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Sep12],
SUM(case when EntryMonth = 10 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Oct12],
SUM(case when EntryMonth = 11 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Nov12],
SUM(case when EntryMonth = 12 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Dec12],
**SUM(case when EntryYear = 2012 then [sumofentry_amount] else 0 end) [2012YTD],
SUM(case when EntryYear = 2011 then [sumofentry_amount] else 0 end) [2011YTD]**
From
(
SELECT [Non_Recurring_Clinic_Step1].CLINIC_ID,
HR_FINAN_CLASS.SUMMARY_CATGRY,
[TABLE_LAYOUT].ENTRY_TYPE,
datepart(month,[entry_date]) EntryMonth,
datepart(year,[entry_date]) EntryYear,
ENTRY_AMOUNT as [sumofentry_amount]
FROM [TABLE_LAYOUT]
Inner Join
(
SELECT [GROUPING_OF_CLINIC_ID].CLINIC_ID, OUTPAT_ACCT_REC.CHARGE_CLASS,[GROUPING_OF_CLINIC_ID].PATIENT_NUMBER, [GROUPING_OF_CLINIC_ID].REGISTRATION_CD, OUTPAT_REGISTER.PRIMARY_FINAN, OUTPAT_ACCT_REC.ENTRY_DATE, SUM(ENTRY_AMOUNT) AS ENTRY_AMOUNT
FROM
OUTPAT_REGISTER
Left JOIN
OUTPAT_BILL_REF
ON(OUTPAT_REGISTER.PATIENT_NUMBER = OUTPAT_BILL_REF.PATIENT_NUMBER)
AND(OUTPAT_REGISTER.REGISTRATION_CD = OUTPAT_BILL_REF.REGISTRATION_CD)
Left JOIN
OUTPAT_ACCT_REC
ON(OUTPAT_BILL_REF.PATIENT_NUMBER = OUTPAT_ACCT_REC.PATIENT_NUMBER)
AND(OUTPAT_BILL_REF.BILL_REFERENCE = OUTPAT_ACCT_REC.REFERENCE_NUM)
Left JOIN
(
SELECT CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD
FROM OP_VISIT_HISTRY
GROUP BY CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD
--ORDER BY CLINIC_ID
)AS [GROUPING_OF_CLINIC_ID]
ON(OUTPAT_REGISTER.PATIENT_NUMBER = [GROUPING_OF_CLINIC_ID].PATIENT_NUMBER)
AND(OUTPAT_REGISTER.REGISTRATION_CD =[GROUPING_OF_CLINIC_ID].REGISTRATION_CD)
GROUP BY [GROUPING_OF_CLINIC_ID].CLINIC_ID,OUTPAT_ACCT_REC.CHARGE_CLASS,[GROUPING_OF_CLINIC_ID].PATIENT_NUMBER,[GROUPING_OF_CLINIC_ID].REGISTRATION_CD,
OUTPAT_ACCT_REC.ENTRY_DATE,OUTPAT_REGISTER.PRIMARY_FINAN
HAVING OUTPAT_ACCT_REC.ENTRY_DATE >'12/31/2010'
)AS [Non_Recurring_Clinic_Step1]
On([TABLE_LAYOUT].ENTRY_CLASS = [Non_Recurring_Clinic_Step1].CHARGE_CLASS)
Inner Join
OUTPAT_REGISTER
On([Non_Recurring_Clinic_Step1].PATIENT_NUMBER = OUTPAT_REGISTER.PATIENT_NUMBER)
And([Non_Recurring_Clinic_Step1].REGISTRATION_CD = OUTPAT_REGISTER.REGISTRATION_CD)
Inner Join
OUTPAT_AREA_CDS
On(OUTPAT_REGISTER.REGISTER_AREA = OUTPAT_AREA_CDS.REGISTER_AREA)
Inner Join
HR_FINAN_CLASS
On(OUTPAT_REGISTER.PRIMARY_FINAN = HR_FINAN_CLASS.FINAN_CLASS_CD)
Where OUTPAT_AREA_CDS.REG_AREA_TYPE <>'RE'
and datepart(year,[entry_date]) in (2011, 2012)
) src
group by CLINIC_ID, SUMMARY_CATGRY, ENTRY_TYPE
我需要YTD 2013和2012列有另一个日期参数,所以我将我的YTD语法切换到下面,我收到此错误
Msg 245,Level 16,State 1,Line 1
时转换失败
将varchar值'1/1/2013'转换为数据类型int。
我想仅在YTD “&gt; ='1/1/2013'和Entryday&lt; ='1/31/2013'”
Select CLINIC_ID,SUMMARY_CATGRY,ENTRY_TYPE,
SUM(case when EntryMonth = 1 and EntryYear = 2013 then [sumofentry_amount] else 0 end) [Jan'13],
SUM(case when EntryMonth = 12 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Dec'12],
SUM(case when EntryMonth = 11 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Nov'12],
SUM(case when EntryMonth = 10 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Oct'12],
SUM(case when EntryMonth = 9 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Sept'12],
SUM(case when EntryMonth = 8 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Aug'12],
SUM(case when EntryMonth = 7 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jul'12],
SUM(case when EntryMonth = 6 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [Jun'12],
SUM(case when EntryMonth = 5 and EntryYear = 2012 then [sumofentry_amount] else 0 end) [May'12],
SUM(case when EntryMonth = 4 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Apr'12],
SUM(case when EntryMonth = 3 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Mar'12],
SUM(case when EntryMonth = 2 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Feb'12],
SUM(case when EntryMonth = 1 and EntryYear = 2012 then [sumofentry_amount] else 0 end)[Jan'12],
**SUM(case when Entryday > = '1/1/2013' and Entryday <= '1/31/2013' then
[sumofentry_amount] else 0 end) [2013YTD],
SUM(case when Entryday > = '1/1/2012' and Entryday <= '1/31/2012' then
[sumofentry_amount] else 0 end) [2012YTD]**
From
(
SELECT [Non_Recurring_Clinic_Step1].CLINIC_ID,
HR_FINAN_CLASS.SUMMARY_CATGRY,
[TABLE_LAYOUT].ENTRY_TYPE,
datepart(month,[entry_date]) EntryMonth,
datepart(year,[entry_date]) EntryYear,
datepart(day,[entry_date]) Entryday,
ENTRY_AMOUNT as [sumofentry_amount]
FROM [TABLE_LAYOUT]
Inner Join
(
SELECT [GROUPING_OF_CLINIC_ID].CLINIC_ID, OUTPAT_ACCT_REC.CHARGE_CLASS,[GROUPING_OF_CLINIC_ID].PATIENT_NUMBER, [GROUPING_OF_CLINIC_ID].REGISTRATION_CD, OUTPAT_REGISTER.PRIMARY_FINAN, OUTPAT_ACCT_REC.ENTRY_DATE, SUM(ENTRY_AMOUNT) AS ENTRY_AMOUNT
FROM
OUTPAT_REGISTER
Left JOIN
OUTPAT_BILL_REF
ON(OUTPAT_REGISTER.PATIENT_NUMBER = OUTPAT_BILL_REF.PATIENT_NUMBER)
AND(OUTPAT_REGISTER.REGISTRATION_CD = OUTPAT_BILL_REF.REGISTRATION_CD)
Left JOIN
OUTPAT_ACCT_REC
ON(OUTPAT_BILL_REF.PATIENT_NUMBER = OUTPAT_ACCT_REC.PATIENT_NUMBER)
AND(OUTPAT_BILL_REF.BILL_REFERENCE = OUTPAT_ACCT_REC.REFERENCE_NUM)
Left JOIN
(
SELECT CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD
FROM OP_VISIT_HISTRY
GROUP BY CLINIC_ID, PATIENT_NUMBER, REGISTRATION_CD
--ORDER BY CLINIC_ID
)AS [GROUPING_OF_CLINIC_ID]
ON(OUTPAT_REGISTER.PATIENT_NUMBER = [GROUPING_OF_CLINIC_ID].PATIENT_NUMBER)
AND(OUTPAT_REGISTER.REGISTRATION_CD =[GROUPING_OF_CLINIC_ID].REGISTRATION_CD)
GROUP BY [GROUPING_OF_CLINIC_ID].CLINIC_ID,OUTPAT_ACCT_REC.CHARGE_CLASS,[GROUPING_OF_CLINIC_ID].PATIENT_NUMBER,[GROUPING_OF_CLINIC_ID].REGISTRATION_CD,
OUTPAT_ACCT_REC.ENTRY_DATE,OUTPAT_REGISTER.PRIMARY_FINAN
HAVING OUTPAT_ACCT_REC.ENTRY_DATE >'12/31/2011'
)AS [Non_Recurring_Clinic_Step1]
On([TABLE_LAYOUT].ENTRY_CLASS = [Non_Recurring_Clinic_Step1].CHARGE_CLASS)
Inner Join
OUTPAT_REGISTER
On([Non_Recurring_Clinic_Step1].PATIENT_NUMBER = OUTPAT_REGISTER.PATIENT_NUMBER)
And([Non_Recurring_Clinic_Step1].REGISTRATION_CD = OUTPAT_REGISTER.REGISTRATION_CD)
Inner Join
OUTPAT_AREA_CDS
On(OUTPAT_REGISTER.REGISTER_AREA = OUTPAT_AREA_CDS.REGISTER_AREA)
Inner Join
HR_FINAN_CLASS
On(OUTPAT_REGISTER.PRIMARY_FINAN = HR_FINAN_CLASS.FINAN_CLASS_CD)
Where OUTPAT_AREA_CDS.REG_AREA_TYPE <>'RE'
and datepart(year,[entry_date]) in (2012, 2013)
) src
group by CLINIC_ID, SUMMARY_CATGRY, ENTRY_TYPE
答案 0 :(得分:0)
Entryday
将是一个整数(see here),这就是您获得无效演员表的原因。您应该对整个entry_date
进行比较。
您还可以对EntryYear = 2013 AND EntryMonth = 1 AND EntryDay IS BETWEEN 1 AND 31
进行比较。但是,如果您要比较整个日期,那么我会使用第一个选项来检查日期而不是每个部分。
答案 1 :(得分:0)
问题是Entryday
是int
,您将它与无法正常工作的日期时间进行比较。 DatePart(day, entry_date)
返回1到31之间的数值。
您应该只使用datepart(day,[entry_date]) Entryday
:
entry_date
SELECT [Non_Recurring_Clinic_Step1].CLINIC_ID,
HR_FINAN_CLASS.SUMMARY_CATGRY,
[TABLE_LAYOUT].ENTRY_TYPE,
datepart(month,[entry_date]) EntryMonth,
datepart(year,[entry_date]) EntryYear,
[entry_date],
ENTRY_AMOUNT as [sumofentry_amount]
然后,当您获得总数时,您将使用:
SUM(case
when entry_date > = '1/1/2013'
and entry_date <= '1/31/2013'
then [sumofentry_amount] else 0 end) [2013YTD],
SUM(case
when entry_date > = '1/1/2012'
and entry_date <= '1/31/2012'
then [sumofentry_amount] else 0 end) [2012YTD]
但要获得YTD值,你真的只需要:
SUM(case when EntryYear = 2013 then [sumofentry_amount] else 0 end) [2013YTD],
SUM(case when EntryYear = 2012 then [sumofentry_amount] else 0 end) [2012YTD]
答案 2 :(得分:0)
好的,你试图比较Entryday
,这是一个数字(1到31),有一个日期,这就是你得到错误的原因。实际上你根本不需要那个列,你可以这样做:
SUM(case when EntryYear = '2013' AND EntryMonth = 1
then [sumofentry_amount] else 0 end) [2013YTD],
SUM(case when EntryYear = '2012' AND EntryMonth = 1
then [sumofentry_amount] else 0 end) [2012YTD]