What you want to see on DotNetFunda.com ?
DotNetFunda.Com Logo
Twitter TwitterLinkedIn
YouTubeGoogle
 Online : 29629 |  Welcome, Guest!   Register  Login
 Home > Forums > Sql Server > Urgent : How to write SQL query??? ...
Somasundaram

Urgent : How to write SQL query???

Replies: 2 | Posted by: Somasundaram on 6/16/2012 | Category: Sql Server Forums | Views: 410 | Status: [Member] | Points: 10  


Hi.,

I have DB structure as follows,

Empcode,SoftwareName,Version --------Column Names
tmp001,Vlc player,Version10.0
tmp001,SQL,Version2005

I need the Output as follows,

Empcode,Software(1),Version(1),Software(2),Version(2) ----Column Names(dynamically Creating according to number of records in DB for each empcode)
tmp001,vlc Player,Version10.0,SQL,Version 2005 -----Record of particular employee

If anybody have any idea pls post it..

Thanks in Advance,

Regards,
Somasundaram


Reply | Reply with attachment | Alert Moderator

 Responses below this adGet hundreds of .NET Tips and Tricks videos

 Replies

Pandians
Pandians  
Posted on: 6/16/2012 2:31:02 PM
Level: Silver | Status: [Member] [MVP] | Points: 50

Resolved

Try this!

Sample Data
Create Table Table1

(
Empcode varchar(10),
SoftwareName varchar(50)
Version varchar(25)
)
Go

Insert Table1 Values('tmp001','Vlc player','Version10.0')
Insert Table1 Values('tmp001','SQL','Version2005')
Insert Table1 Values('tmp002','Access','2000')
Go
Declare @MaxColumn Int, @Column Varchar(Max)


;With MaxCol
As
(
Select Empcode, Count(1) [MaxColumn] from Table1
Group By Empcode
)

Select @MaxColumn = Max(MaxColumn) From MaxCol

;With Cols
As
(
Select 1 as [Col]
Union All
Select [Col] + 1 [Col] From Cols Where Col <@MaxColumn
)

Select @Column = COALESCE(@Column+',','') + '[Software(' + Cast(Col as Varchar) + ')] Varchar(50),[Version('+ Cast(Col as Varchar) +')] Varchar(50)' from Cols

Select @Column = 'Create Table ##Result(Empcode Varchar(50),' + @Column + ')'

Exec(@Column)

Insert ##Result(Empcode)
Select Distinct Empcode from Table1

Declare @Start Int, @Max Int, @Rept Int, @EmpCode Varchar(50)

Select Identity(Int,1,1) RowNo, Row_Number() Over(Partition By Empcode Order by Empcode) [Seq],Empcode
Into #SeqData from Table1

Select @Max = Count(1) From Table1

Select @Start = 1

While(@Start <=@Max)
Begin
Select @Rept=[Seq], @EmpCode =EmpCode from #SeqData Where RowNo = @Start

Select @Column = '
Update H Set H.[Software(' + Cast(@Rept as Varchar) + ')] = T.SoftwareName, H.[Version(' + Cast(@Rept as Varchar) + ')] = T.[Version]
From ##Result H,
(
Select Row_Number() Over(Order by Empcode) RowNo,Row_Number() Over(Partition By Empcode Order by Empcode) [Seq],* from Table1
)as T
Where H.Empcode = T.Empcode
And T.Seq = ' + Cast(@Rept as Varchar)+' And T.EmpCode ='''+ @EmpCode + '''
And T.RowNo = '+ Cast(@Start as Varchar)

Exec(@Column)

Select @Start = @Start + 1
End

Select * from ##Result

Drop Table ##Result
Drop Table #SeqData
Result
Empcode	Software(1)	Version(1)	Software(2)	Version(2)

------ --------- -------- ---------- ----------
tmp001 Vlc player Version10.0 SQL Version2005
tmp002 Access 2000 NULL NULL


Cheers
www.SQLServerbuddy.blogspot.com
iLink Multitech Solutions

Somasundaram, if this helps please login to Mark As Answer. | Reply | Alert Moderator 

Somasundaram
Somasundaram  
Posted on: 6/17/2012 11:12:34 AM
Level: Starter | Status: [Member] | Points: 25

hi pandians,

Thank you very much...


Regards,
Somasundaram

Somasundaram, if this helps please login to Mark As Answer. | Reply | Alert Moderator 

Reply - Please login to reply


Click here to login & reply

About Us | Contact Us | The Team | Advertise | Software Development | Write for us | Testimonials | Privacy Policy | Terms of Use | Link Exchange | Members | Go Top
General Notice: If you find plagiarised (copied) contents on this page, please let us know the original source along with your correct email id (to communicate) for further action.
Copyright © DotNetFunda.Com. All Rights Reserved. Copying or mimicking the site design and layout is prohibited. Logos, company names used here if any are only for reference purposes and they may be respective owner's right or trademarks. | 5/23/2013 4:48:36 AM