2009-05-12 6 views
0

SQL 서버 테이블 쌍이 있습니다.SQL 쿼리 부모 - 자식 구별

P는 ID와 이름을 포함합니다. PR에는 id, interestrate, tiernumber, fromdate, todate 및 P.id가 포함되어 있습니다. PR에는 pid/tier 당 여러 행이 나열 될 수 있습니다. (계층은 제품이 특정 날짜 기간에있을 수있는 비율의 목록입니다.)

예 : 제품 1 계층 1은 1/1/2008부터 1/1/2009까지 시작하며 비율 당 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를 확인해야하므로 결과 집합을 제한해야합니다.

아이디어가 있으십니까?

+1

"PR.ID를 볼 필요가 있습니다"는 의미는 무엇입니까? PR.ID는 행마다 많은 수를 가지므로 하나만 표시 할 수 있습니다. P.ID/Tier 또는 PR.ID 당 행이 있습니다. –

+0

죄송합니다 - 응용 프로그램에 고유 ID를 반환해야합니다. 사용자는 모든 제품 계층을보고 싶어하고 화면에서 더 많이 채워지도록 하나를 선택할 수 있기를 원합니다. 선택한 항목의 계층 번호를 찾아서 나머지 데이터를 가져 오는 데 사용해야합니다 ... 그러나 고유 ID가 있으면 응용 프로그램이 계층 번호 만 제공 할 수 있습니다. –

답변

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 

해야 할 일. DISTINCT 대신 GROUP BY, 요약 함수 (MIN)를 사용하여 PR.ID에 대한 특정 값을 얻습니다.

+0

예 이것은 특정 PR.ID 값을 반환하지만 OP 질문 *에서 어느 PR.ID 값이 필요한지는 명확하지 않습니다 (MIN이 아닐 수도 있습니다). 아마도 그는 분명히 할 것입니다. –

+0

MIN은 SUM보다 조금 더 의미가 있다고 생각했습니다. ;-) –

+0

선생님, 학자이고 신사입니다. 그냥 시도하고 멋지게 작동합니다. 고맙습니다. –

1

동일한 검색어로 서로 다른 두 가지 작업을 수행하려는 것처럼 들리지만 이는 의미가 없습니다. 당신은 제품/계층/날짜 정보의 목록을 원하거나 이자율 목록을 원합니다.

데이터와 함께 사용하기 위해 특정 PR.ID를 선택하려면 해당 규칙이 무엇인지 결정해야합니다. 어떤 ID로 되돌리려면 결정할 것인가?

+0

Tom, 고맙습니다. 예, 신청서로 인해 제한됩니다. 내가하고있는 일은 사용자에게 옵션을 제한하여 제품에 5 티어가 있음을 확인하는 것입니다. 그들이 역사적인 계층을보기로 결정할 때, 그들은 하나의 옵션을 선택한 다음 그 계층에 대한 모든 요율을 가져옵니다 ... 나는 응용 프로그램에 고유 한 ID를 제공하여 다시 되돌릴 수 있도록해야합니다. 다음 ID를 실행할 수 있습니다. 술책. –