2017-06-20 32 views
-1
Declare procursor CURSOR FOR 
SELECT CLAIMNO from RPT_CLAIM_MD_COMBO 
DECLARE @myyear Integer 
Declare @provar varchar(22) 

open procursor 

fetch next from procursor into @provar 

WHILE(@@FETCH_STATUS = 0) 
BEGIN 
SET @myyear = (SELECT 
CASE 
WHEN CONVERT(INTEGER,BTHDAT) = 0 THEN 0 
WHEN datepart(DY,convert(date, BTHDAT)) > datepart(DY,'2015/07/01') THEN DATEDIFF(YEAR, convert(date, BTHDAT),'2015/07/01') - 1 
ELSE DATEDIFF(YEAR,convert(date, BTHDAT),'2015/07/01') 
END 
from RPT_CLAIM_MD_COMBO WHERE CLAIMNO = @provar) 


SELECT SERVICE_GROUP, SERVICE_CATEGORY, 
CASE 
WHEN @myyear - 2015 <= 0 AND @myyear - 2015 >= 5 THEN 'Early Child' 
WHEN @myyear - 2015 <= 6 AND @myyear - 2015 >= 12 THEN 'Child' 
WHEN @myyear - 2015 <= 13 AND @myyear - 2015 >= 17 THEN 'Adolescent' 
WHEN @myyear - 2015 <= 18 AND @myyear - 2015 >= 21 THEN 'Transitional' 
WHEN @myyear - 2015 <= 22 AND @myyear - 2015 >= 64 THEN 'Adult' 
WHEN @myyear - 2015 >= 65 THEN 'Geriatric' 
ELSE '0' 
END AS Age_desc, 
SUM(CONVERT(MONEY, TOPAY)) AS PAID_AMT  
FROM RPT_CLAIM_MD_COMBO 
WHERE SERVICE_FY = '2016' and DISTYP = 'P' AND CLAIMNO = @provar 
GROUP BY 
SERVICE_GROUP,SERVICE_CATEGORY, 
CASE 
WHEN @myyear - 2015 <= 0 AND @myyear - 2015 >= 5 THEN 'Early Child' 
WHEN @myyear - 2015 <= 6 AND @myyear - 2015 >= 12 THEN 'Child' 
WHEN @myyear - 2015 <= 13 AND @myyear - 2015 >= 17 THEN 'Adolescent' 
WHEN @myyear - 2015 <= 18 AND @myyear - 2015 >= 21 THEN 'Transitional' 
WHEN @myyear - 2015 <= 22 AND @myyear - 2015 >= 64 THEN 'Adult' 
WHEN @myyear - 2015 >= 65 THEN 'Geriatric' 
ELSE '0' 
END 

fetch next from procursor into @provar 

END 

CLOSE procursor 

我想要做的是從RPT_CLAIM_MD_COMBO表中獲取所有用戶。第一次檢查他們的年齡。如果用戶的出生日期的DY> 2015/07/01的DY,則將他的年齡減少1,否則保持相同的年齡。Ms sql server - 爲變量分配一個日期

一旦計算出年齡,我必須根據年齡(i,e按年齡分組)顯示支出。 我編寫了這麼多,我收到此錯誤 消息329,級別16,狀態1,行21每個GROUP BY表達式必須至少包含一個列引用

+0

錯誤?什麼錯誤?沒有看到任何錯誤。 – mustaccio

+0

立即檢查圖片 – shailuk

回答

0

你不能像分配一個變量那。此外,有什麼意義?你在哪裏使用這個變量?只要刪除set @MYYEAR =,你應該沒問題。如果您確實想用該邏輯分配該變量,請在主語句SELECT之外執行。

declare @MYYEAR int 
set @MYYEAR = 
(SELECT 
    CASE 
     WHEN CONVERT(INTEGER,BTHDAT) = 0 THEN 0 
     WHEN datepart(DY,convert(date, BTHDAT)) > datepart(DY,'2015/07/01') THEN DATEDIFF(YEAR, convert(date, BTHDAT),'2015/07/01') - 1 
     ELSE DATEDIFF(YEAR,convert(date, BTHDAT),'2015/07/01') 
    END 
FROM SomeTable) 

SELECT 
    SERVICE_GROUP, 
    SERVICE_CATEGORY, 
    @MYYEAR 
FROM 
    SomeOtherTable 
+0

嗨,我已編輯帖子。請考慮一下。如果可能的話請幫忙。 – shailuk

+0

我回答了您的原始問題。你把我的答案,併入一個新的問題,然後編輯這個問題,並在那裏使用它...這並沒有幫助,並不是如何計算器工作 – scsimon

+0

抱歉打擾你。我真的不知道堆棧溢出的技術方面。 – shailuk