0

我有一对 SQL 服务器表。

P 包含 id 和 name。PR 包含 id、interestrate、tiernumber、fromdate、todate 和 P.id。PR 可能包含每个 p.id / tier 列出的许多行。(等级是产品在任何给定日期期间可能具有的费率列表。)

例如:产品 1 层 1 从 2008 年 1 月 1 日到 2009 年 1 月 1 日开始,有 6 个费率,每个费率显示 1 行。产品 1 层 2 开始于 2009 年 1 月 2 日等等等等

我需要一个显示 P.name 和 PR.tiernumber 和日期的视图......但我只想要一行来代表层。

这很简单:

SELECT DISTINCT P.ID, P.PRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
  PR.FROMDATE, PR.TODATE, PR.PRODUCTID
FROM dbo.PRODUCTRATE AS PR INNER JOIN dbo.PRODUCT AS P 
  ON P.ID = PR.PRODUCTID
ORDER BY P.ID DESC

这给了我正确的数据......但是:这不允许我看到 PR.ID,因为这会否定不同的。

我需要限制结果集,因为用户只需要查看层列表,我需要查看显示所有数据的 PR.ID。

有任何想法吗?

4

2 回答 2

1
SELECT P.ID, P.ACUPRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
  PR.FROMDATE, PR.TODATE, PR.PRODUCTID, MIN(PR.ID)
FROM dbo.PRODUCTRATE AS PR INNER JOIN dbo.PRODUCT AS P 
  ON P.ID = PR.PRODUCTID
GROUP BY P.ID, P.ACUPRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
  PR.FROMDATE, PR.TODATE, PR.PRODUCTID
ORDER BY P.ID DESC

应该做的工作。GROUP BY 代替 DISTINCT,使用汇总函数 (MIN) 来获取 PR.ID 的特定值。

于 2009-05-12T20:03:10.987 回答
1

听起来您想用同一个查询完成两件不同的事情,这没有意义。您要么需要产品/等级/日期信息列表,要么需要利率列表。

如果你想选择一个特定的 PR.ID 来处理你的数据,那么你需要决定规则是什么——是什么决定了你想取回哪个 ID?

于 2009-05-12T20:03:47.303 回答