SQL查询父子不相同

SQL查询父子不相同,sql,sql-server,parent-child,Sql,Sql Server,Parent Child,我有一对SQL server表 p包含id和name。 PR包含id、利率、tiernumber、fromdate、todate和P.id。PR可能包含每个p.id/层列出的许多行。(分层是产品在任何给定日期段可能具有的费率列表。) 例如:产品1 tier 1从2008年1月1日开始至2009年1月1日,有6种费率,每种费率显示一行。产品1第2层从2009年1月2日开始等 我需要一个显示p.name、PR.tiernumber和日期的视图。。。但我只想用一行来表示层 这很简单: SELECT D

我有一对SQL server表

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

例如:产品1 tier 1从2008年1月1日开始至2009年1月1日,有6种费率,每种费率显示一行。产品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,因为这将否定distinct

我需要限制resultset,因为用户只需要查看一个层列表,我需要查看显示所有数据的PR.ID

有什么想法吗

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的特定值。

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


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

你说的“我需要查看PR.ID”是什么意思?哪一个PR.ID,因为每行有多个PR.ID,所以只能显示一个PR.ID。每个P.ID/层或每个PR.ID都有一行。对不起,我需要向应用程序返回一个唯一的ID。用户希望看到产品的所有层,然后希望能够选择一个在屏幕上更完整地填充的层。我需要找到所选项目的层编号,然后使用该编号获取其余数据。。。但应用程序只能在具有唯一ID的情况下给我层号。是的,这会返回一个特定的PR.ID值,但OP的问题是,他需要哪个PR.ID值(可能不是最小值)并不清楚。也许他会澄清。我认为在这种情况下,MIN比SUM更有意义先生,你是一位学者和绅士。刚试过这个,效果非常好。非常感谢。比尔,我只需要一个带这个号码的ID,然后我用这个号码取数据。汤姆,谢谢。是的,我受申请限制。我所做的是获得一个视图来限制用户的选项,以便他们只看到一个产品有5层。当他们决定查看历史层时,他们选择一个选项,然后我获取该层的所有费率。。。我需要为应用程序提供一个唯一的ID,以便它可以将其返回给我,以便我可以运行下一次获取。