2017-06-23 62 views
0

我有一个SQL查询,它给soem错误说“组”使用不正确。 我正在使用SQL包装器之一creted来与db2表进行交互。SQL查询给出一些错误

有人可以指导我什么是错的。我不能使用PIVOT所以试过这个。

with CTE as 
(
select distinct(P.Hfan_id)as HFAN_ID, 
Min(Case P.HFA_PARAM_NV When 'BUSI_WANT_CALL' Then P.HFAN_PARAM_TXT End) as BUSI_WANT_CALL, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN1_DT' Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN1_DT, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN2_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN2_DT, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN3_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN3_DT, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN4_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN4_DT, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN5_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN5_DT, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD1_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD1_RESPONS, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD2_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD2_RESPONS, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD3_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD3_RESPONS, 

Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD4_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD4_RESPONS, 
Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD5_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD5_RESPONS, 

Min(Case P.HFA_PARAM_NV When 'CODEPT_SPOUSE_MK' Then P.HFAN_PARAM_TXT End) as CODEPT_SPOUSE_MK, 
Min(Case P.HFA_PARAM_NV When 'HL_SUMMERHOUSE_MK' Then P.HFAN_PARAM_TXT End) as HL_SUMMERHOUSE_MK, 
Min(Case P.HFA_PARAM_NV When 'HL_STUDENT_LOAN' Then P.HFAN_PARAM_TXT End) as HL_STUDENT_LOAN , 
Min(Case P.HFA_PARAM_NV When 'HL_OTHER_LOAN' Then P.HFAN_PARAM_TXT End) as HL_OTHER_LOAN , 
Min(Case P.HFA_PARAM_NV When 'SHFAN_CPR_ID' Then P.HFAN_PARAM_TXT End) as SHFAN_CPR_ID , 
Min(Case P.HFA_PARAM_NV When 'SHL_STUDENT_LOAN' Then P.HFAN_PARAM_TXT End) as SHL_STUDENT_LOAN, 
Min(Case P.HFA_PARAM_NV When 'SHL_OTHER_LOAN' Then P.HFAN_PARAM_TXT End) as SHL_OTHER_LOAN, 
Min(Case P.HFA_PARAM_NV When 'HL_LOANTYPE' Then P.HFAN_PARAM_TXT End) as HL_LOANTYPE, 
Min(Case P.HFA_PARAM_NV When 'HL_LOAN_AMOUNT' Then P.HFAN_PARAM_TXT End) as HL_LOAN_AMOUNT, 
Min(Case P.HFA_PARAM_NV When 'HL_PROPERTY_TYPE' Then P.HFAN_PARAM_TXT End) as HL_PROPERTY_TYPE 


Group by P.hfan_id, P.HFAN_PARAM_TXT, P.HFA_PARAM_NV 
having 
P.hfan_id in 
(14835145, 
14697134, 
14697430, 
14694884, 
14694999, 
14693122, 
14693074) 
) 

Select * from P1, 

S.HFAS_EMAIL, 
S.HFAS_PRIV_MOB_NR, 
Q.HFAS_ÆGTESTIL_TP, 
R.HFAN_BØRN_HJEM_AN, 
R.HFAN_TO_LÅNTAG_MK 

from CTE P1 
inner join hf.HF_ANSØGER_S Q 
on P1.hfan_id = Q.hfan_id 
inner join hf.HF_ANSØGNING_S R 
on P1.hfan_id = R.hfan_id 
inner join hf.HF_ANSØGER1_S S 
on P1.hfan_id=S.hfan_id 

错误 - “组” 未正确使用。

+1

你没有一个'from'条款在CTE中。 –

+1

除了缺少'from',你还使用'distinct'和'group by'。这没什么意义;删除'distinct'并在你的'group by'中选择属性。 – HoneyBadger

回答

2

正如我在评论中提到,你缺少的CTE的from条款。另外,您应该过滤where子句而不是havinggroup by看起来没有写(提示:select distinct在聚合查询中几乎不需要)。

所以,我想应该是这样的:

with CTE as (
     select P.Hfan_id, 
      . . . 
     from p 
     where P.hfan_id in (14835145, 14697134, 14697430, 14694884, 14694999, 14693122, 14693074) 
     Group by P.hfan_id 
    ) 
+0

我用的代码pasted.the从错误解决buut仍然我得到一些重复的数据。任何指针? – vish1990

0

你有

select distinct(P.Hfan_id)as HFAN_ID, 
... 
(THERE SHOULD BE A FROM STATEMENT HERE) 
group by P.hfan_id, P.HFAN_PARAM_TXT, P.HFA_PARAM_NV 

你需要有一个FROM之间的那些2.尝试这一点,看看是否有帮助。

0

你不能使用GROUP BY分明......和其他人说,从丢失

+1

。 。当然,你可以通过'group by'使用'select distinct'。这几乎是不需要的。 (挑战:想象一个问题,聚合查询中的'select distinct'是合适的;)。 –

+1

你是对的(通常情况下):)我从来没有使用与群组截然不同,但正如你所说,这是可能的。防爆。从表中选择不同的aa,count(*)aa,bb; – NikNik

0

你必须包括你是“分组依据”在SELECT语句中的列。您需要P.HFAN_PARAM_TXT添加到Select语句作为一个单独的列

0

感谢大家对你的answer.The工作液(以防万一):

with CTE as 
    (
    select P.Hfan_id as HFAN_ID, 
    Min(Case P.HFA_PARAM_NV When 'BUSI_WANT_CALL' Then P.HFAN_PARAM_TXT End) as BUSI_WANT_CALL, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN1_DT' Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN1_DT, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN2_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN2_DT, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN3_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN3_DT, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN4_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN4_DT, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILDREN5_DT'Then P.HFAN_PARAM_TXT End) as HFAN_CHILDREN5_DT, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD1_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD1_RESPONS, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD2_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD2_RESPONS, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD3_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD3_RESPONS, 

    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD4_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD4_RESPONS, 
    Min(Case P.HFA_PARAM_NV When 'HFAN_CHILD5_RESPONS' Then P.HFAN_PARAM_TXT End) as HFAN_CHILD5_RESPONS, 

    Min(Case P.HFA_PARAM_NV When 'CODEPT_SPOUSE_MK' Then P.HFAN_PARAM_TXT End) as CODEPT_SPOUSE_MK, 
    Min(Case P.HFA_PARAM_NV When 'HL_SUMMERHOUSE_MK' Then P.HFAN_PARAM_TXT End) as HL_SUMMERHOUSE_MK, 
    Min(Case P.HFA_PARAM_NV When 'HL_STUDENT_LOAN' Then P.HFAN_PARAM_TXT End) as HL_STUDENT_LOAN , 
    Min(Case P.HFA_PARAM_NV When 'HL_OTHER_LOAN' Then P.HFAN_PARAM_TXT End) as HL_OTHER_LOAN , 
    Min(Case P.HFA_PARAM_NV When 'SHFAN_CPR_ID' Then P.HFAN_PARAM_TXT End) as SHFAN_CPR_ID , 
    Min(Case P.HFA_PARAM_NV When 'SHL_STUDENT_LOAN' Then P.HFAN_PARAM_TXT End) as SHL_STUDENT_LOAN, 
    Min(Case P.HFA_PARAM_NV When 'SHL_OTHER_LOAN' Then P.HFAN_PARAM_TXT End) as SHL_OTHER_LOAN, 
    Min(Case P.HFA_PARAM_NV When 'HL_LOANTYPE' Then P.HFAN_PARAM_TXT End) as HL_LOANTYPE, 
    Min(Case P.HFA_PARAM_NV When 'HL_LOAN_AMOUNT' Then P.HFAN_PARAM_TXT End) as HL_LOAN_AMOUNT, 
    Min(Case P.HFA_PARAM_NV When 'HL_PROPERTY_TYPE' Then P.HFAN_PARAM_TXT End) as HL_PROPERTY_TYPE 
    from hf.hf_ANSØGNINGP_S P 
    where 
    P.hfan_id in 
    (14835145, 
    14834519, 
    14697430, 
    14694884, 
    14694999, 
    14693122, 
    14693074) 
    Group by P.hfan_id 

    ) 

    Select P1.*, 

    S.HFAS_EMAIL, 
    S.HFAS_PRIV_MOB_NR, 
    Q.HFAS_ÆGTESTIL_TP, 
    R.HFAN_BØRN_HJEM_AN, 
    R.HFAN_TO_LÅNTAG_MK 

    from CTE P1 
    inner join hf.HF_ANSØGER_S Q 
    on P1.hfan_id = Q.hfan_id 
    inner join hf.HF_ANSØGNING_S R 
    on P1.hfan_id = R.hfan_id 
    inner join hf.HF_ANSØGER1_S S 
    on P1.hfan_id=S.hfan_id