2014-02-24 36 views
1

因此,我想显示将受汇率影响的项目列表。以下select语句显示产品清单以及原始销售价格,价值测试具有计算成本 - 汇率*的IF语句。如果它大于原始销售价格,那么查询应该打印它,如果不是只显示null将IF条件变量放在SQL中的Where子句中

除此之外,最终列表不应该包含NULL测试值。

我已经尝试在where子句中添加测试IS NOT NULL,但sql server无法识别该函数。我怎样才能显示它?

MYSQL SELECT

select 
    p.itemcode, p.itemdescription, p.sellingprice, c.exchangerate, 
    IF (cos.costofitem * c.exchangerate > p.sellingprice, 
     cos.costofitem * c.exchangerate, 
     NULL) as test 
from 
    product p 
    join supplier s on p.suppliercode = s.suppliercode 
    join currency c on c.countrycode=s.countrycode 
    join country co on co.countrycode=c.countrycode 
    left join cost cos on cos.itemcode=p.itemcode 
where 
    c.countrycode = 'NZ' and s.excode = 0 
group by p.itemcode 

OUTPUT

GS771516 UBBLE PARTY MACHINE  2175.00 37.38  NULL 
GS771517 BUBBLE PARTY MACHINE JR 925.00 37.38  NULL 
GS771518 TURBO BUBBLE MACHINE  1430.00 37.38  NULL 
GS771989 GIANT BUBBLE WAND   435.00 37.38 747.6000 
GS771999 MEGA BUBBLES    1235.00 37.38  NULL 

,我想输出:

GS771989 GIANT BUBBLE WAND  435.00 37.38 747.6000 
+0

您必须在WHERE子句中重复该函数。 – Tomalak

+0

原因是WHERE发生在SELECT之前。如果您愿意,您只能从已通过过滤器的内容中进行选择。这就是为什么WHERE不知道在SELECT中使用的公式或别名。您可以使用内部查询进行计算,并使用外部查询对计算进行过滤。如果这种情况在你的情况下更快,你必须进行测量。 – Tomalak

回答

0

我如果您使用LEFT JOIN,则sql会获得空值为空的行(NULL),请使用INNER JOIN以仅获取完成咨询的行。

0

更好的选择是,你应该使用加入,而不是左连接,因此只有有效的行会通过查询中获取,但如果你想使用您的查询,然后使用下面单

试试下面的查询:

SELECT itemcode, itemdescription, sellingprice, exchangerate, test FROM 
(SELECT p.itemcode, p.itemdescription, p.sellingprice, c.exchangerate, 
IF (cos.costofitem * c.exchangerate > p.sellingprice, cos.costofitem * c.exchangerate, 
NULL) AS test 
FROM product p JOIN supplier s ON p.suppliercode = s.suppliercode 
JOIN currency c ON c.countrycode=s.countrycode 
JOIN country co ON co.countrycode=c.countrycode 
LEFT JOIN cost COS ON cos.itemcode=p.itemcode 
WHERE c.countrycode = 'NZ' AND s.excode = 0 
GROUP BY p.itemcode) a 
WHERE test IS NOT NULL 
+0

我已经试过这个,它没有工作。感谢寿!上面的用户评论说,我只是重复在where条款 – user3345272

+0

pleaes检查编辑答案的全部条件... –

+0

如果我做这种查询,它仍然不工作。我想我只会解决在where子句中添加条件'cos.costofitem * c.exchangerate> p.sellingprice'。谢谢! – user3345272