SQL Server组合数据问题

SQL Server组合数据问题,sql,sql-server,sql-server-2005,sql-server-2008,Sql,Sql Server,Sql Server 2005,Sql Server 2008,嘿,我正试图把我的数据合并成一个总和。这是我现在的输出: Amount --------- $258.0 $400.0 $1011.0 $628.0 $628.0 $340.0 $340.0 $1764.0 当然总数是5369美元。这是我需要的输出类型 Description | Quantity | Price | Amount -------------------------------------------- Fees 8 $1.50

嘿,我正试图把我的数据合并成一个总和。这是我现在的输出:

Amount
---------
$258.0
$400.0
$1011.0
$628.0
$628.0
$340.0
$340.0
$1764.0
当然总数是5369美元。这是我需要的输出类型

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

                                   $5381.00
我真正需要的信息只有8125369.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

在您的澄清之后,如果您真的必须在查询本身中执行所有这些操作,我认为您需要类似的操作

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  

在您的澄清之后,如果您真的必须在查询本身中执行所有这些操作,我认为您需要类似的操作

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  

对于单行上的结果,请尝试:

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

对于单行上的结果,请尝试:

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


费用、再付款、数量和价格都来自哪里?您的表定义是什么?看起来Redep Amount是所有金额数字的总和,Quantity是行数,Fees Amount是Fees Price乘以Quantity,而(未标记的)总计是Redep Amount+Fees Amount-但是,您没有给出任何关于费用价格来源的指示。您想将其硬编码为1.50美元吗?是的,费用硬编码为1.50美元,不会改变。它的数量是x1.50(8x1.50),这是12。Redep总额是“金额”的总和。最后,总数是金额+12=5381.00的总和。费用、再贴现、数量和价格都来自哪里?您的表定义是什么?看起来Redep Amount是所有金额数字的总和,Quantity是行数,Fees Amount是Fees Price乘以Quantity,而(未标记的)总计是Redep Amount+Fees Amount-但是,您没有给出任何关于费用价格来源的指示。您想将其硬编码为1.50美元吗?是的,费用硬编码为1.50美元,不会改变。它的数量是x1.50(8x1.50),这是12。Redep总额是“金额”的总和。最后,总数是金额+12=5381.00的总和。这似乎不起作用,马丁。我的表格中没有说明、数量和价格。我只是给他们起了名字,以便更好地理解我要做的事情。我现在在尝试您刚刚发布的代码时出现错误[Msg 8117,级别16,状态1,第3行操作数数据类型varchar对sum运算符无效]。我想您一定是将数字数据存储为varchar了吧?这不是个好主意。您需要从原始查询执行
转换(int,Points)
。似乎不起作用,Martin。我的表格中没有说明、数量和价格。我只是给他们起了名字,以便更好地理解我要做的事情。我现在在尝试您刚刚发布的代码时出现错误[Msg 8117,级别16,状态1,第3行操作数数据类型varchar对sum运算符无效]。我想您一定是将数字数据存储为varchar了吧?这不是个好主意。您需要从原始查询执行
转换(int,Points)
。很好的示例,Mark!谢谢o) 另一个简短的问题。我如何将这些设置为变量@FeesQty=fees\u amount,@FeesTotal=total\u amount,等等?@StealthRT,类似于Martin的方法-首先声明变量,然后更改周围的查询项;所以
选择count(*)fees\u quantity,1.5 fees\u price,
。。。变成
选择@fees\u数量=计数(*),@fees\u价格=1.5
。。。等等,伟大的榜样,马克!谢谢o) 另一个简短的问题。我如何将这些设置为变量@FeesQty=fees\u amount,@FeesTotal=total\u amount,等等?@StealthRT,类似于Martin的方法-首先声明变量,然后更改周围的查询项;所以
选择count(*)fees\u quantity,1.5 fees\u price,
。。。变成
选择@fees\u数量=计数(*),@fees\u价格=1.5
。。。等