2016-06-10 57 views
1

我有问题: 我可以在条件中加入条件吗?条件中有条款

我已经尝试了条件如下:

SELECT distinct 
U.ID as USERID,   
U.CODE_PAYS, 
T.SKU, 
T.URL_IMAGE, 
T.PRODUCT_NAME_WEBSITE, 
T.BASELINE_1, 
T.URL_FICHE_PRODUIT 
FROM DATA_CATALOGUE_MARKETING T 
INNER JOIN USERS_CONTACT U 
ON T.CODE_PAYS = U.CODE_PAYS 
INNER JOIN DATA_TRANSACTION_DETAILS DTD ON DTD.ID_CONTACT = U.ID AND DTD.CODE_PAYS = U.CODE_PAYS 
INNER JOIN DATA_CATALOGUE_MARKETING DCM ON DCM.SKU = DTD.SKU AND T.INTERNAL_REF = DCM.INTERNAL_REF_NON_SAMPLE 
AND DCM.CODE_PAYS = DTD.CODE_PAYS 
AND DCM.GROUPE_ATTRIBUT = 'Sample' 
GROUP BY U.ID, U.CODE_PAYS, T.SKU, T.URL_IMAGE_PRODUIT, T.PRODUCT_NAME_WEBSITE, T.BASELINE_1, T.URL_FICHE_PRODUIT 
AND 
(
    (
     U.CODE_PAYS = 'GB' 
     HAVING MAX(convert(date,TRANS_DATE,120))) = convert(date,GETDATE()-14,120) 
    ) 
    OR 
    (
     U.CODE_PAYS = 'FR' 
     HAVING MAX(convert(date,TRANS_DATE,120))) = convert(date,GETDATE()-24,120) 
    ) 
) 

这种情况不起作用。我怎样才能解决这个问题?

感谢

+1

请向我们展示您的完整查询! '拥有'是在'group by'之后使用的,在您显示的内容中不清楚 – Sam

+0

您可以发布完整查询以便更好地理解。现在看起来它是“Where”子句的一部分,但不能用于Where子句 –

+0

“不起作用”不是有用的描述。 –

回答

1

子句滤波器组尝试使用CASE WHEN:

HAVING MAX(convert(date,TRANS_DATE,120)) = (CASE WHEN U.CODE_PAYS = 'GB' THEN convert(date,GETDATE()-14,120) 
               WHEN U.CODE_PAYS = 'FR' THEN convert(date,GETDATE()-24,120) 
               ELSE NULL END) 
+0

非常感谢你! – dutycorpse

1

你可以把一个条件,having子句,但不能把having子句中的条件

HAVING是结果不是函数..eg

........ 

GROUP BY U.ID, U.CODE_PAYS, T.SKU, T.URL_IMAGE_PRODUIT, T.PRODUCT_NAME_WEBSITE, T.BASELINE_1, T.URL_FICHE_PRODUIT 
HAVING MAX(convert(date,TRANS_DATE,120))) = convert(date,GETDATE()-14,120) 
....... 
+0

好吧,我明白了,我已经通过这个例子来了解我需要什么。 如何在条款中加入条件? – dutycorpse