-1

I have a following table:

TICKER   DATE      SHAREPRICE 
--------------------------------
ABC     1.1.2015      50
XYZ     1.1.2015     100

etc.

I want to make a query, where the result is following:

DATE      PRICE(TICKER ABC) PRICE(TICKER XYZ)
--------------------------------------------
1.1.2015      50                  100
jarlh
  • 42,561
  • 8
  • 45
  • 63
Leo
  • 3
  • 3

2 Answers2

1

Use PIVOT in SQL SERVER.

DECLARE @test AS TABLE(TICKER VARCHAR(10), DATE DATETIME, SharePrice  INT)

INSERT INTO @test
SELECT 'ABC', '1/1/2015', 50 UNION
SELECT 'XYZ', '1/1/2015', 100


SELECT Date, ABC AS [PRICE(TICKER ABC)], XYZ AS [PRICE(TICKER XYZ)]  FROM @test
PIVOT(MAX(SharePrice) FOR Ticker IN(ABC, XYZ)) AS A
Saravana Kumar
  • 3,669
  • 5
  • 15
  • 35
0

In TSQL you can write a query using dynamic pivot as:

DECLARE @cols AS NVARCHAR(MAX),@colsFinal AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ', ' + TICKER 
                    from test1
                    group by TICKER, [DATE]

            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @colsFinal = STUFF((SELECT distinct ', isnull( ' + TICKER  +
                           ' ,0) as [PRICE (TICKER ' + TICKER +' )]'
                    from test1
                    group by TICKER, [DATE]

            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')



set @query = N'SELECT [Date],' + @colsFinal + N' from 
             (
                select [Date], TICKER , SharePrice
                from test1 
            ) x
            pivot 
            (
                max(SharePrice)
                for TICKER in (' + @cols + N')
            ) p '


exec sp_executesql @query;

DEMO

Deepshikha
  • 9,896
  • 2
  • 21
  • 21