2010-10-22 60 views
0

嘿,我想知道如何将变量设置为以下查询字符串的输出:SQL服务器:从查询输出设置变量

SELECT count(*) fees_quantity, 
    1.5 fees_price, 
    1.5 * count(*) fees_amount, 
    round(SUM((CONVERT(int,Points) * .1)),0)) redep_amount, 
    round(SUM((CONVERT(int,Points) * .1)),0)) + 1.5 * count(*) total_amount 
FROM tblHGP HGP, 
    OrderDetails OD, 
    tblInvoices i 
    JOIN tblCS cs ON i.INumber = cs.INumber 
    JOIN tblECI ac ON i.INumber = ac.INumber 
WHERE cs.SoldTo = HGP.ECard 
AND issued BETWEEN '2010-09-01' AND '2010-09-30 23:59:59' 
AND Country = 'US' 
AND HGP.iNumber = OD.orderdetail 

我怎么能这样做?

DECLARE @FeesQty varchar(3) 
DECLARE @FeesTotal varchar(10) 
DECLARE @RedepTotal varchar(10) 
DECLARE @Total varchar(10) 

@FeesQty = fees_quantity 
@FeesTotal = fees_amount 
@RedepTotal = redep_amount 
@Total = total_amount 

这怎么能做到?

谢谢!

大卫

回答

4

像这样:

DECLARE @FeesQty varchar(3) 
DECLARE @FeesTotal varchar(10) 
DECLARE @RedepTotal varchar(10) 
DECLARE @Total varchar(10) 

SELECT 
    @FeesQty = count(*), 
    @FeesTotal = 1.5 * count(*), 
    @RedepTotal = round(SUM((CONVERT(int,Points) * .1)),0)), 
    @Total = round(SUM((CONVERT(int,Points) * .1)),0)) + 1.5 * count(*) 
FROM tblHGP HGP, 
    OrderDetails OD, 
    tblInvoices i 
    JOIN tblCS cs ON i.INumber = cs.INumber 
    JOIN tblECI ac ON i.INumber = ac.INumber 
WHERE cs.SoldTo = HGP.ECard 
AND issued BETWEEN '2010-09-01' AND '2010-09-30 23:59:59' 
AND Country = 'US' 
AND HGP.iNumber = OD.orderdetail 

还是 - 我想 - 如果你不想修改您的查询:

DECLARE @FeesQty varchar(3) 
DECLARE @FeesTotal varchar(10) 
DECLARE @RedepTotal varchar(10) 
DECLARE @Total varchar(10) 

SELECT 
    @FeesQty = t.fees_quantity, 
    @FeesTotal = t.fees_amount, 
    @RedepTotal = t.redep_amount, 
    @Total = t.total_amount 
FROM (
    SELECT count(*) fees_quantity, 
     1.5 fees_price, 
     1.5 * count(*) fees_amount, 
     round(SUM((CONVERT(int,Points) * .1)),0)) redep_amount, 
     round(SUM((CONVERT(int,Points) * .1)),0)) + 1.5 * count(*) total_amount 
    FROM tblHGP HGP, 
     OrderDetails OD, 
     tblInvoices i 
     JOIN tblCS cs ON i.INumber = cs.INumber 
     JOIN tblECI ac ON i.INumber = ac.INumber 
    WHERE cs.SoldTo = HGP.ECard 
    AND issued BETWEEN '2010-09-01' AND '2010-09-30 23:59:59' 
    AND Country = 'US' 
    AND HGP.iNumber = OD.orderdetail 
) t 
+0

真棒加布里埃尔!谢谢一堆! :o) – StealthRT 2010-10-22 17:50:02

+1

在SQL中,您应该尝试“匹配”数据类型。如果生成一个数字(例如从该数(*)),它应该存储在一个适当类型的变量 - 例如,我会使@FeesQty一个int。让GUI处理格式问题,因为它们做得更好。 – 2010-10-22 17:53:06

+0

@菲利普凯利:非常真实! – 2010-10-22 18:31:51