2011-04-12 7 views
2

에 의해 GROUP을 사용하여 T-SQL에서 같은 행의 여러 열을 반환합니다 : MEMBERID, 는 TransactionId, 날짜, MethodOfPayment을 + 더 많은 열는 어떻게 다음과 같은 열이 포함 된 트랜잭션 테이블이

기본 키는 MemberID와 TransactionID로 구성됩니다. 최신 날짜에 대해이 행을 MemberID별로 그룹화하는 쿼리가 필요합니다. 그것은 쉽지만 추가적으로 나는 MethodOfPayment와 같은 최신 날짜에 대한 나머지 열이 필요합니다. 나는 이것을 성취 할 수있는 가장 간단한 방법을 찾고있다.

나는 이것이 할 수있는 방법 중 하나라는 것을 알고 있지만 필자가 갖고있는 모든 열에 대해 하위 쿼리를 포함해야한다면 쿼리가 실제로 길어진다. 내 직감은 더 나은 방법이 있어야한다고 말해줍니다.

SELECT 
    MemberID, 
    MAX(Date) AS Date, 
    (
     SELECT TOP(1) MethodOfPayment 
     FROM Transactions 
     WHERE MemberID = t.MemberID 
     ORDER BY Date DESC 
    ) AS MethodOfPayment 
FROM Transactions t 
GROUP BY MemberID 
+0

사용하는 SQL 서버의 버전은 SQL Server 2005에있는 경우, 또는 또 다른 방법은? – Lamak

+0

SQL Server 2008 R2 –

답변

8

한 가지 방법

SELECT t1.* 
FROM(
SELECT 
    MemberID, 
    MAX(Date) AS MaxDate 
    FROM Transactions 
GROUP BY MemberID) t2 
JOIN Transactions t1 ON t2.MaxDate = t1.Date 
AND t2.MemberID = t1.MemberID 

당신이

;WITH cte AS(SELECT *, 
ROW_NUMBER() OVER(PARTITION BY MemberID ORDER BY date DESC) AS ROW 
FROM Transactions) 

SELECT * FROM cte 
where row = 1 
+1

공용 테이블 식에도 테이블 이름이 없기 때문에 두 번째 방법을 잘 이해하지 못합니다. –

+0

그것은 내가 그것을 추가하는 것을 잊었 기 때문에 나는 그것을 지금 추가했다. – SQLMenace

관련 문제