【问题标题】:How do I get only one row from a list of items in SQL Server?如何从 SQL Server 中的项目列表中仅获取一行?
【发布时间】:2011-09-24 05:01:06
【问题描述】:

我有一个像这样的非标准化销售数据库:

Invoice  Item     Price  Total_Sale
-------  ----     -----  ----------
565      Nails    1.25   6.25
565      Hammer   5.00   6.25
566      Paint    7.95   7.95
...

如您所见,发票中每个行项目重复了“total_sale”。发票 #565 有两个项目,总计 6.25 美元。发票 #566 只有一项,总计 7.95 美元。两张发票的总和(total_sale)应为 14.20 美元。

问:有没有什么简单的方法可以为每张不同的发票获取所有列*仅一个行?无论发票有 1 个、2 个还是 100 个行项目?

【问题讨论】:

  • 意思是你想要 565 total_sale 12.50 这样的结果,对吗?
  • @paulsm4 - 你在这里真正需要什么。我的回答解决了您提出的具体问题,但不确定您为什么要这样做,并且可能有更好的方法。

标签: sql sql-server


【解决方案1】:

问:有没有什么简单的方法可以让一行的所有列* 每张不同的发票?

WITH T AS
(
SELECT 
      Invoice,
      Item,
      Price,
      Total_Sale,
      ROW_NUMBER() OVER (PARTITION BY Invoice ORDER BY (SELECT 0)) AS RN
FROM YourTable
)
SELECT 
      Invoice,
      Item,
      Price,
      Total_Sale
FROM T 
WHERE RN=1;

【讨论】:

    【解决方案2】:

    一个简单的查询是:

    Select SUM(Price), Invoice, Total_Sale From InvoicesTable
    Group By Invoice, Total_Sale
    Order By Invoice
    

    不能包含项目列,因为分组依据会产生多行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-20
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      相关资源
      最近更新 更多