2010-10-22 5 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,00 и 5381,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

Где Пошлины, Redep, количество и цена все взялось? Каковы ваши определения таблиц? –

+0

выглядит так, как если бы сумма повторения была суммой всех ваших сумм, количество - количество ваших рядов, сумма вознаграждения - это сумма комиссионных сборов Количество раз Количество и (немеченое) общее количество - это сумма пересчета Сумма + сумма оплаты - t дал какое-либо указание относительно того, откуда должна исходить стоимость вознаграждения. Вы хотите, чтобы он был жестко закодирован как 1,50 доллара? –

+0

Да, сборы жестко закодированы в 1,50, что не изменится. Его величина X 1.50 (8 x 1.50), которая равна 12. Redep Total - это «Сумма» SUM'ed вверх. И, наконец, сумма составляет СУММ суммы + 12 = 5381,00. – StealthRT

ответ

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

+0

Теперь я получаю сообщение об ошибке [Msg 8117, Level 16, State 1, Line 3 Тип данных операндов varchar недействителен для оператора сумм] при попытке вашего только что опубликованного вами кода. – StealthRT

+0

Предполагаю, что вы должны хранить числовые данные как varchar? Не хорошая идея. Вам нужно будет сделать 'CONVERT (int, Points)' из вашего исходного запроса. –

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

+0

Еще один быстрый вопрос. Как я могу установить каждый из них в varible? @FeesQty = fee_amount, @FeesTotal = total_amount и т. Д.?? – StealthRT

+1

@StealthRT, аналогичный метод Martin - сначала объявить переменные, а затем изменить элементы запроса; поэтому 'SELECT count (*) fee_quantity, 1.5 fee_price,' ... становится 'SELECT @ fee_quantity = count (*), @ fee_price = 1,5' ... и т. д. –

Смежные вопросы