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.
| Author |
Topic |
|
NguyenL71
Posting Yak Master
228 Posts |
Posted - 2009-12-10 : 23:34:11
|
| --SQL 2005.I am converting Access db to SQL Server and need some help how to construct the queryto desire results below. Thank you in advance.IF OBJECT_ID('Tempdb.dbo.#LoanComp', 'u') IS NOT NULL DROP TABLE #LoanComp GOCREATE TABLE #LoanComp ( CompId INT NULL, PurchPerf BIT NULL, PurchNonPerf BIT NULL, PurchRePerf BIT NULL, PurchSemiPerf BIT NULL)GOINSERT INTO #LoanComp VALUES (8, 1, 0, 1, 1)INSERT INTO #LoanComp VALUES (9, 1, 1, 0, 0)INSERT INTO #LoanComp VALUES (11, 0, 0, 0, 0)INSERT INTO #LoanComp VALUES (17, 1, 1, 1, 1)INSERT INTO #LoanComp VALUES (40, 0, 1, 1, 1);GO SELECT * FROM #LoanComp; GO CompId PurchPerf PurchNonPerf PurchRePerf PurchSemiPerf----------- --------- ------------ ----------- -------------8 1 0 1 19 1 1 0 011 0 0 0 017 1 1 1 140 0 1 1 1 -- How can I convert 1 to corresponding the businessrules below and concatenate with -- other purchase types also. -- Business Rules: 1 = Purchase-Performing else 0 = ' ' 1 = Purchase-Non-Performing else 0 = ' ' 1 = Purchase-RE-Performing else 0 = ' ' 1 = Purchase-Semi-Performingelse 0 = ' ' -- Desire results: CompId PurchaseType ------ --------- 8 Purchase-Performing, Purchase-RE-Performing, Purchase-Semi-Performing 9 Purchase-Performing, Purchase-Non-Performing 11 17 Purchase-Performing,Purchase-Non-Performing, Purchase-RE-Performing, Purchase-Semi-Performing 40 Purchase-non-Performing, Purchase-RE-Performing, Purchase-Semi-Performing --Testing... SELECT CompId, CASE WHEN PurchPerf = 1 THEN 'Purchase-Performing' WHEN PurchNonPerf = 1 THEN 'Purchase-Non-Performing' WHEN PurchRePerf = 1 THEN 'Purchase-RE-Performing' WHEN PurchSemiPerf = 1 THEN 'Purchase-Semi-Performing' END AS 'PurchaseType' FROM #LoanComp; |
|
|
senthil_nagore
Master Smack Fu Yak Hacker
1007 Posts |
Posted - 2009-12-11 : 01:08:23
|
| Can you expect this??SELECT CompId,CASE WHEN PurchPerf = 1 THEN 'Purchase-Performing' else '' end,CASE WHEN PurchNonPerf = 1 THEN 'Purchase-Non-Performing' else '' end,CASE WHEN PurchRePerf = 1 THEN 'Purchase-RE-Performing' else '' end,CASE WHEN PurchSemiPerf = 1 THEN 'Purchase-Semi-Performing' else '' endFROM #LoanCompSenthil.C------------------------------------------------------[Microsoft][ODBC SQL Server Driver]Operation canceledhttp://senthilnagore.blogspot.com/ |
 |
|
|
DP978
Constraint Violating Yak Guru
269 Posts |
Posted - 2009-12-11 : 10:18:58
|
| Not saying this is the BEST way, but it is A way... Select CompId,(case when PurchPerf = 1 then 'PurchPerf' else '' end + case when PurchNonPerf = 1 then ' ,PurchPerf' else '' end + case when PurchRePerf = 1 then ' ,PurchRePerf' else '' end + case when PurchSemiPerf = 1 then ' ,PurchSemiPerf' else '' end ) as StringFrom #LoanCompYou just need to create a condition to remove the first value if Left(String, 1) = ',' |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-12-11 : 12:29:49
|
| [code];With CTE(CID,Rule,Stat)AS(SELECT CompId,Rule,StatFROM (SELECT CompId,PurchPerf AS Purchase-Performing ,PurchNonPerf AS Purchase-Non-Performing ,PurchRePerf AS Purchase-RE-Performing,PurchSemiPerf AS Purchase-Semi-Performing FROM #LoanComp )tUNPIVOT (Stat FOR Rule IN ('Purchase-Performing','Purchase-Non-Performing','Purchase-RE-Performing','Purchase-Semi-Performing'))u)SELECT t.CID,LEFT(t.u,LEN(t.u)-1) AS PurchaseTypeFROM (SELECT DISTINCT CID FROM CTE) tCROSS APPLY(SELECT CASE WHEN Stat=1 THEN Rule ELSE '' END + ',' FROM CTE WHERE CID= t.CID FOR XML PATH(''))t(u)[/code] |
 |
|
|
|
|
|
|
|