SQL查询父子不同

时间:2009-05-12 19:49:09

标签: sql sql-server parent-child

我有一对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开始于1/2/2009等等等

我需要一个关于这个的视图,它显示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显示所有数据。

有什么想法吗?

2 个答案:

答案 0 :(得分: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的特定值。

答案 1 :(得分:1)

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

如果您想选择一个特定的PR.ID来处理您的数据,那么您需要决定该规则是什么 - 什么决定了您想要获得哪个ID?