SQL-запрос Родитель-ребенок отличается - PullRequest
0 голосов
/ 12 мая 2009

У меня есть пара таблиц SQL-сервера.

P содержит идентификатор и имя. PR содержит id, процентную ставку, tiernumber, fromdate, todate и P.id. PR может содержать много строк, перечисленных для каждого p.id / уровня. (Уровни - это список тарифов, которые продукт может иметь в любой заданный период.)

Например: продукт 1 уровня 1 начинается с 01.01.2008 по 01.01.2009 и имеет 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 ]

1 голос
/ 13 мая 2009

Звучит так, будто вы хотите выполнить две разные задачи с помощью одного и того же запроса, что не имеет смысла. Либо вам нужен список информации о продукте / уровне / дате, либо список процентных ставок.

Если вы хотите выбрать определенный PR.ID для ваших данных, вам нужно решить, какое правило для этого - что определяет, какой ID вы хотите получить обратно?

1 голос
/ 13 мая 2009
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.

...