2009-10-08 34 views
0

我的问题是,此应用程序部署时考虑了很多不同的付款选项,而且这些付款选项因部署而异。如何让一组结果成为我的选择语句?

我的问题是,我如何使一组结果成为我的选择语句?

SELECT DISTINCT(CONCAT('SUM(IF(pay_type = "',pay_type,'", pay_amt,0)) AS `',pay_type,'`')) as queryFields 
FROM transaction_payments; 

这使它我这样的结果:

SUM(IF(pay_type = "Cash", pay_amt,0)) AS `Cash`, SUM(IF(pay_type = "Credit Card", pay_amt,0)) AS `Credit Card` 
SUM(IF(pay_type = "Discount %", pay_amt,0)) AS `Discount %`, SUM(IF(pay_type = "Gift Card", pay_amt,0)) AS `Gift Card` 
SUM(IF(pay_type = "Coupon", pay_amt,0)) AS `Coupon` 
SUM(IF(pay_type = "Gift Certificate", pay_amt,0)) AS `Gift Certificate` 
SUM(IF(pay_type = "Discount Amt.", pay_amt,0)) AS `Discount Amt. 

变成我在下面的查询SELECT语句,但代码要做到这一点是相当繁琐的。我想知道如果没有应用程序代码的帮助,这可以在单个查询中执行。

回答

0

使用SQL来构建SQL? EW。 *不寒而栗*

我会建议你的做法是错误的。而不是让一行一切,你应该改为得到它在多行:

select pay_type 
    , sum(pay_amt) as pay_amt 
    from transaction_payments 
group 
    by pay_type 

,如果你想要把那个水平表,然后做在你的主机语言。

如果你想在另一个查询中使用它,那么你需要提供更多的上下文。

+0

我认为从sql生成select语句比手工编码所有可能的付款类型更容易,尤其是考虑到它们从一个部署到另一个部署都不尽相同。尽管如此,我的上司也不这么想。我只是想让机器能够工作。 感谢您的快速响应。 – kristofer 2009-10-08 19:46:25

+0

要花上几天的时间来追踪所有可能的类型:( – kristofer 2009-10-08 20:02:40

+0

你不必对它们进行硬编码,我在哪里说的? – longneck 2009-10-08 20:14:56