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 |
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 05:45:14
|
| hiCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALL SELECT 30, 'SOCIAL' I need to write the query to find who will take the both the coursefor course name input param...for example i will pass SCI & SOCIALI need output ID 10help on this.. |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 05:45:54
|
| how will you passing them? as comma separated values? |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 05:48:56
|
| DECLARE @STRING VARCHAR(50)SET @STRING = 'SCI,SOCAIL' |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 05:50:59
|
here's a way (passing csv)CREATE PROC getdetails@CourseList varchar(8000)ASDECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM TableWHERE @CourseList LIKE '%,' + COURSE + ',%'GROUP BY ID HAVING COUNT(DISTINCT COURSE)=@CntGO |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 05:51:36
|
| execute like EXEC getdetails @STRING |
 |
|
|
bklr
Master Smack Fu Yak Hacker
1693 Posts |
Posted - 2010-01-12 : 05:53:50
|
try patindex alsoCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL'DECLARE @STRING VARCHAR(50)SET @STRING = 'SCI,SOCAIL'SELECT * FROM #TEMP WHERE PATINDEX('%,' + CAST( COURSE AS VARCHAR(255)) +',%',','+@STRING+',' )>0 |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 05:56:53
|
quote: Originally posted by bklr try patindex alsoCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL'DECLARE @STRING VARCHAR(50)SET @STRING = 'SCI,SOCAIL'SELECT * FROM #TEMP WHERE PATINDEX('%,' + CAST( COURSE AS VARCHAR(255)) +',%',','+@STRING+',' )>0
your query output below like this..but i need who took both the course SCI & SOCIALID COURSE10 SCI20 SCI |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 05:57:42
|
quote: Originally posted by visakh16 execute like EXEC getdetails @STRING
Your solution will get blank..result set |
 |
|
|
bklr
Master Smack Fu Yak Hacker
1693 Posts |
Posted - 2010-01-12 : 06:01:57
|
quote: Originally posted by WoodHouse
quote: Originally posted by bklr try patindex alsoCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL'DECLARE @STRING VARCHAR(50)SET @STRING = 'SCI,SOCAIL'SELECT * FROM #TEMP WHERE PATINDEX('%,' + CAST( COURSE AS VARCHAR(255)) +',%',','+@STRING+',' )>0
your query output below like this..but i need who took both the course SCI & SOCIALID COURSE10 SCI20 SCI
just check out the spelling for the input social u have given as SOCAIL |
 |
|
|
bklr
Master Smack Fu Yak Hacker
1693 Posts |
Posted - 2010-01-12 : 06:04:28
|
quote: Originally posted by WoodHouse
quote: Originally posted by visakh16 execute like EXEC getdetails @STRING
Your solution will get blank..result set
use like as small modification to visakh querySELECT * FROM #TEMP WHERE @STRING LIKE '%'+ COURSE +'%'SELECT * FROM #TEMP WHERE ','+ @STRING+',' LIKE '%,'+ COURSE +',%' |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 06:05:33
|
| Am sure your query will return two columns like below ...ID COURSE10 SCI20 SCIBut i need who took two course... |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 06:09:20
|
| DECLARE @CourseList varchar(8000)SET @CourseList = 'SCI,SOCAIL'DECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM #TEMPWHERE ','+ @CourseList+',' LIKE '%,'+ COURSE +',%'GROUP BY ID HAVING COUNT(DISTINCT COURSE)=@Cntabove one also i get blank |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 06:42:43
|
quote: Originally posted by WoodHouse DECLARE @CourseList varchar(8000)SET @CourseList = 'SCI,SOCAIL'DECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM #TEMPWHERE ','+ @CourseList+',' LIKE '%,'+ COURSE +',%'GROUP BY ID HAVING COUNT(DISTINCT COURSE)=@Cntabove one also i get blank
make sure you pass same value as in your data SOCIAL not SOCAIL |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 06:50:07
|
| CREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL'DECLARE @CourseList varchar(8000)SET @CourseList = 'SCI,SOCIAL' If you want you can change the input param format so that i can change in front end... |
 |
|
|
bklr
Master Smack Fu Yak Hacker
1693 Posts |
Posted - 2010-01-12 : 07:02:24
|
| [code]is this u wantDROP TABLE #TEMPCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL'DECLARE @STRING VARCHAR(50)SET @STRING = 'SCI,SOCIAL'SELECT ID FROM #TEMP WHERE PATINDEX('%,'+ COURSE +',%','%,'+@STRING+',%' )> 0GROUP BY ID HAVING COUNT(DISTINCT Course) >1[/code] |
 |
|
|
brian147
Starting Member
10 Posts |
Posted - 2010-01-12 : 07:02:25
|
| you could try a user-defined table function to parse the input parameter into rows (there are plenty of "split" type functions out there), then do:select IDfrom #TEMPwhere COURSE in (select rowname from dbo.udfSplitFunction(@inputParameter)group by IDhaving count(*) > 1 |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 07:11:50
|
quote: Originally posted by WoodHouse CREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'maths' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL'DECLARE @CourseList varchar(8000)SET @CourseList = 'SCI,SOCIAL' If you want you can change the input param format so that i can change in front end...
Is it still showing blank? |
 |
|
|
WoodHouse
Posting Yak Master
211 Posts |
Posted - 2010-01-12 : 07:18:45
|
| HiCan you check below your code...DROP TABLE #TEMPCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'MATHS' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL' UNION ALLSELECT 30, 'MATHS'DECLARE @CourseList varchar(8000)SET @CourseList = 'SOCIAL,MATHS'DECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM #TEMPWHERE @CourseList LIKE '%,' + COURSE + ',%'GROUP BY ID HAVING COUNT(DISTINCT COURSE)=@CntGO |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 07:20:49
|
quote: Originally posted by WoodHouse HiCan you check below your code...DROP TABLE #TEMPCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'MATHS' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL' UNION ALLSELECT 30, 'MATHS'DECLARE @CourseList varchar(8000)SET @CourseList = 'SOCIAL,MATHS'DECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM #TEMPWHERE ',' + @CourseList + ',' LIKE '%,' + COURSE + ',%'GROUP BY ID HAVING COUNT(DISTINCT COURSE)=@CntGO
modify like above |
 |
|
|
bklr
Master Smack Fu Yak Hacker
1693 Posts |
Posted - 2010-01-12 : 07:20:53
|
| DROP TABLE #TEMPCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'MATHS' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL' UNION ALLSELECT 30, 'MATHS'DECLARE @CourseList varchar(8000)SET @CourseList = 'SOCIAL,MATHS'DECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM #TEMPWHERE @CourseList LIKE '%' + COURSE + '%'GROUP BY IDHAVING COUNT(DISTINCT COURSE)=@CntGO |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-01-12 : 07:23:13
|
quote: Originally posted by bklr DROP TABLE #TEMPCREATE TABLE #TEMP(ID INT , COURSE VARCHAR(50))INSERT INTO #TEMPSELECT 10, 'SCI' UNION ALLSELECT 10, 'SOCIAL' UNION ALLSELECT 10, 'MATHS' UNION ALLSELECT 20, 'SCI' UNION ALLSELECT 30, 'SOCIAL' UNION ALLSELECT 30, 'MATHS'DECLARE @CourseList varchar(8000)SET @CourseList = 'SOCIAL,MATHS'DECLARE @Cnt intSELECT @Cnt = LEN(@CourseList)-LEN(REPLACE(@CourseList,',','')) + 1SELECT IDFROM #TEMPWHERE @CourseList LIKE '%' + COURSE + '%'GROUP BY IDHAVING COUNT(DISTINCT COURSE)=@CntGO
wont always return correct resultsconsider case where you've identical course names |
 |
|
|
Next Page
|
|
|
|
|