2010-10-22 42 views
0

嘿,我想把我的數據合併成一個總和。這是現在我的輸出:SQL Server結合數據問題

Amount 
--------- 
$258.0 
$400.0 
$1011.0 
$628.0 
$628.0 
$340.0 
$340.0 
$1764.0 

當然總將是$ 5369。這是輸出的I型需要

Description | Quantity | Price | Amount 
-------------------------------------------- 
Fees   8   $1.50 $12.00 
Redep        $5369.00 

            $5381.00 

只以上信息,我真的很需要的是,,5369.005381.00

這是我的查詢來獲取我先貼這些值:

SELECT '$' + CONVERT(varchar(50),round((CONVERT(int,Points) * .1),0)) AS '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 
ORDER BY issued 
+4

在哪裏費,再沉積物,數量和價格都從何而來?你的表定義是什麼? – 2010-10-22 15:58:42

+0

它看起來好像Redep金額是所有金額數字的總和,數量是您的行數,費用金額是費用價格倍數和(未標記的)總金額是Redep金額+費用金額 - 但是,您沒有'沒有給出費用價格來自哪裏的任何跡象。你希望它被硬編碼爲1.50美元嗎? – 2010-10-22 16:08:21

+0

是的,費用是硬編碼在1.50不會改變。其數量X 1.50(8 x 1.50)即12。Redep Total是累計的金額。最後,Total是金額+ 12 = 5381.00的總和。 – StealthRT 2010-10-22 16:22:02

回答

4

按照你澄清,如果你真的必須這樣做,所有在查詢本身,我認爲你需要這樣的東西。

DECLARE @Points float, @Qty int 

SELECT @Points = SUM(Points), @Qty = 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 


SELECT [Description],Quantity,Price, Amount 
FROM 
( 
SELECT 1 AS OrderBy, 'Fees' AS [Description],@Qty AS Quantity, 1.50 AS Price , 1.5*@Qty AS Amount 
UNION ALL 
SELECT 2 AS OrderBy, 'Redep' AS [Description],NULL AS Quantity, NULL AS Price , @Points AS Amount 
UNION ALL 
SELECT 3 AS OrderBy, NULL AS [Description],NULL AS Quantity, NULL AS Price , @Points + 1.5*@Qty AS Amount 
) D 
ORDER BY OrderBy 
+0

似乎沒有用,馬丁。我沒有說明,數量,價格在我的表格中。我只是給了他們一些名字,以便更好地理解我想要做的事情。 – StealthRT 2010-10-22 16:34:31

+0

當嘗試剛纔發佈的代碼時,我現在收到錯誤消息[消息8117,級別16,狀態1,行3 操作數數據類型varchar對求和運算符無效]。 – StealthRT 2010-10-22 16:39:09

+0

我認爲你必須將數字數據存儲爲varchar呢?不是一個好主意。您需要從原始查詢中執行'CONVERT(int,Points)'。 – 2010-10-22 16:40:44

1

有關單行結果,請嘗試:

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 
ORDER BY issued 
+0

偉大的例子,馬克!謝謝! :o) – StealthRT 2010-10-22 16:49:18

+0

另一個快速問題。我怎樣才能把每一個設置成一個變量? @FeesQty = fees_amount,@FeesTotal = total_amount等...? – StealthRT 2010-10-22 17:17:32

+1

@StealthRT,與Martin類似的方法 - 首先聲明變量,然後更改周圍的查詢項;所以'SELECT count(*)fees_quantity,1.5 fees_price,'...變成'SELECT @ fees_quantity = count(*),@ fees_price = 1.5' ...等 – 2010-10-22 17:50:56