Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2008 Forums
 Transact-SQL (2008)
 need help on update statement

Author  Topic 

Idyana
Yak Posting Veteran

96 Posts

Posted - 2012-04-13 : 02:35:40
I've tables and data as following,

declare @tApplyProgram table (myID varchar(50), programID varchar(10), stTR char(1) null)
insert into @tApplyProgram(myID,programID) values('1925','184');
insert into @tApplyProgram(myID,programID) values('4474','172');
insert into @tApplyProgram(myID,programID) values('8890','172');
insert into @tApplyProgram(myID,programID) values('5578','172');
insert into @tApplyProgram(myID,programID) values('2980','172');
insert into @tApplyProgram(myID,programID) values('2500','172');
insert into @tApplyProgram(myID,programID) values('1925','180');
insert into @tApplyProgram(myID,programID) values('5578','180');
/*
@tApplyProgram keep applicant and their programID
myID and programID is unique
*/

declare @tResult table (myID varchar(50), subjectCd varchar(50))
insert into @tResult values('1925','01')
insert into @tResult values('1925','02')
insert into @tResult values('1925','03')
insert into @tResult values('4474','03')
insert into @tResult values('4474','04')
insert into @tResult values('4474','05')
insert into @tResult values('5578','01')
insert into @tResult values('5578','02')
insert into @tResult values('5578','03')
insert into @tResult values('2980','01')
insert into @tResult values('2980','02')
/*
@tResult keep their applicant's result
myID and subjectCd is unique
*/


declare @tRulesD table (programID varchar(50), subjectCd varchar(50))
insert into @tRulesD values('172','05')
insert into @tRulesD values('172','02')
insert into @tRulesD values('172','15')
insert into @tRulesD values('184','01')
insert into @tRulesD values('184','02')
insert into @tRulesD values('184','03')
/*
@tRulesD keep programID rules and regulation
programID and subjectCd is unique
*/


If the programID being applied (@tApplyProgram) to meet requirements (@tRulesD), set stTR=1. If not meet requirements , set stTR=0. Else leave it to NULL

Expected results are shown as below,
myID  | programID  | stTR
------------------------------------
1925 184 1 /*1925 have rows in @tResult, and 184 have rows in @tRulesD. And, it's meet the requirements */
4474 172 0 /*4474 have rows in @tResult, and 172 have rows in @tRulesD. But, it's not meet the requirements */
8890 172 NULL /*8890 don't have rows in @tResult*/
5578 172 0 /*5578 have rows in @tResult, and 172 have rows in @tRulesD. But, it's not meet the requirement*/
2980 184 0 /*2980 have rows in @tResult, and 184 have rows in @tRulesD. But. it's not meet the requirement*/
2500 172 NULL /*2500 don't have rows in @tResult*/
1925 180 NULL /*180 don't have rows in @tRulesD*/
5578 180 NULL /*180 don't have rows in @tRulesD*/


Really need help to built the T-SQL. I'm stuck

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2012-04-13 : 03:37:22
[code]-- Solution by SwePeso
;WITH cteSource(myID, programID, HasNull, HasValue)
AS (
SELECT ap.myID,
ap.programID,
MAX(CASE WHEN rd.subjectCd IS NULL THEN 1 ELSE 0 END) AS HasNull,
MAX(CASE WHEN rd.subjectCd IS NULL THEN 0 ELSE 1 END) AS HasValue
FROM @tApplyProgram AS ap
LEFT JOIN @tResult AS r ON r.myID = ap.myID
LEFT JOIN @tRulesD AS rd ON rd.programID = ap.programID
AND rd.subjectCd = r.subjectCd
GROUP BY ap.myID,
ap.programID
)
SELECT myID,
programID,
CASE
WHEN HasValue = 0 THEN NULL
ELSE 1 - HasNull
END AS stTR
FROM cteSource[/code]


N 56°04'39.26"
E 12°55'05.63"
Go to Top of Page

Idyana
Yak Posting Veteran

96 Posts

Posted - 2012-04-13 : 04:05:13
Kindest SwePeso,

tq very much sir
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2012-04-13 : 12:11:16
[code]
SELECT p.myID , p.programID,
CASE WHEN COUNT(r.myID)= 0 OR COUNT(rl.programID)=0 THEN NULL
WHEN COUNT(r.myID) = COUNT(rl.programID) THEN 1
ELSE 0
END
FROM @tApplyProgram p
OUTER APPLY (SELECT myID
FROM @tResult
WHERE myID = p.myID
)r
OUTER APPLY (SELECT programID
FROM @tRulesD
WHERE programID = p.programID
AND subjectCd = r.subjectCd
)rl
GROUP BY p.myID , p.programID
[/code]

------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/

Go to Top of Page

Idyana
Yak Posting Veteran

96 Posts

Posted - 2012-04-14 : 00:59:51
tq mr visakh
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2012-04-15 : 13:21:25
wc

------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/

Go to Top of Page
   

- Advertisement -