이것은 ms-sql 2008의 내 테이블입니다.
Id ReceiptNo StudId Year SchoolId ClassId FeeId Paid Balance
18 1 22 1 4 1 8 50 100
19 1 22 1 4 1 9 100 2300
20 2 23 1 5 1 9 200 2200
21 2 23 1 5 1 10 100 900
22 3 22 1 4 1 8 100 0
23 3 22 1 4 1 9 100 2200
특정 StudId 및 FeeId 의 Balance 가 최소이지만 0이 아닌 행을 원합니다 . 실제로 사용자에게 보류중인 수수료를 표시하고 싶습니다. 즉,이 학생은 이번 학년도에이 수수료 유형의 잔액이이 정도 남아 있습니다. 당신이 행을 관찰하면 아이디 (18) 가 StudId (22) 와 8 FeeId 및 밸런스 (100) , 지금과 행 이드가 22 개 쇼 잔액 0 의 모든 비용 지불이 (22) 학생을 의미 같은 학생들과 같은 수수료와 8 FeeId을 내가 원하는하지 않도록, 이 학생은 FeeId 8 입니다. 이제 동일한 학생이 FeeId 9로 수수료를 지불 했습니다.ID 19 (23) 와 두 가지가 균형 2300 및 2200을 나는 것을 보여주고 싶은, 그래서 StudId (22) 가 밸런스 남은 2200을 FeeId 9 내가 가진 행 보여주고 싶은 의미 아이디 (23) 및 NOT 으로 행을 아이디 19 . 이제 이것은 그들이 가지고있는 수수료 ID에 관계없이 모든 학생들에게 적용됩니다.
나는 이것을 시도했지만 얻지 못했습니다.
SELECT StudentId,FeeTypeId,MIN(FeesBalance)
FROM FeesCollectionRS
WHERE FeesBalance !=0 GROUP BY StudentId,FeeTypeId
실제로 실제로 내 쿼리는 다음과 같습니다.
SELECT f.StudentId,f.AcademicYear,f.SchoolId,f.MstClassId,f.FeeTypeId,d.PrnNo ,dbo.GetStudNameByStudid(f.StudentId) student,
CAST(year(a.StartOfYear)as CHAR(4))+'-'+ CAST(year(a.EndOfYear)as CHAR(4)) [Academic Year],c.Name,m.FeeType,f.FeesBalance
FROM
FeesCollectionRS f JOIN AcademicYearMasterRS a
ON f.AcademicYear = a.Id JOIN ClassMasterRS c
ON f.MstClassId = c.MstClassId JOIN MstFeeType m
ON f.FeeTypeId = m.FeeTypeId JOIN MstStudentRS d
ON d.StudentId = f.StudentId
WHERE
f.AcademicYear =1 and f.FeesBalance !=0
이건 어때:
MS SQL Server 2008 스키마 설정 :
CREATE TABLE StudentFees
(
Id INT PRIMARY KEY,
ReceiptNo INT,
StudId INT,
[Year] SMALLINT,
SchoolId INT,
ClassId INT,
FeeId INT,
Paid INT,
Balance INT
)
INSERT INTO StudentFees
VALUES (18, 1, 22, 1, 4, 1, 8, 50, 100),
(19, 1, 22, 1, 4, 1, 9, 100, 2300),
(20, 2, 23, 1, 5, 1, 9, 200, 2200),
(21, 2, 23, 1, 5, 1, 10, 100, 900),
(22, 3, 22, 1, 4, 1, 8, 100, 0),
(23, 3, 22, 1, 4, 1, 9, 100, 2200)
쿼리 1 :
;WITH CTE
AS
(
SELECT StudId, FeeId, [Year], MAX(Id) As MaxId
FROM StudentFees
GROUP BY StudId, FeeId, [Year]
)
SELECT SF.StudId, SF.[Year],
SF.SchoolId, SF.ClassId, SF.FeeId, SF.Balance
FROM StudentFees SF
INNER JOIN CTE
ON CTE.MaxId = SF.Id
WHERE SF.Balance > 0
결과 :
| StudId | Year | SchoolId | ClassId | FeeId | Balance |
|--------|------|----------|---------|-------|---------|
| 22 | 1 | 4 | 1 | 9 | 2200 |
| 23 | 1 | 5 | 1 | 9 | 2200 |
| 23 | 1 | 5 | 1 | 10 | 900 |
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다