Solved

Crosstab query SQL Server

Posted on 2011-09-23
6
229 Views
Last Modified: 2012-05-12
I have a table:

Referred from                     ImpressionCount                      TimeStamp
--------------------------------------------------------------------------------------------
www.google.com                                      50                      2011-09-17
www.blabla.com                                         2                      2011-09-17
www.xyz.com                                           12                      2011-09-17
www.google.com                                      20                      2011-09-18
www.blabla.com                                         7                      2011-09-18
www.xyz.com                                           13                      2011-09-18
...............
...............
...............


How do I make it a crosstab query that gets the last 7 day's data and results look like

Referred from                                      2011-09-17            2011-09-18            2011-09-19  ...
--------------------------------------------------------------------------------------------------------------------------------------------------------
www.google.com                                          50                               20                           10
www.blabla.com                                             2                                 7                             8
www.xyz.com                                               12                                13                           10

0
Comment
Question by:koossa
  • 3
  • 2
6 Comments
 
LVL 15

Expert Comment

by:Anuj
ID: 36585676
For SQL Server 2005 and Above


CREATE TABLE CrossTab
(ReferredFrom VARCHAR(100),
 ImpressionCount INT,
 TStamp DATETIME)
 

DECLARE @SQL VARCHAR(MAX)
  , @Columns VARCHAR(MAX)
            
SET @Columns = STUFF((
                       SELECT DISTINCT
                                ',' + QUOTENAME(CONVERT(VARCHAR, tStamp, 105))
                                AS 'data()'
                       FROM     CrossTab
                     FOR
                       XML PATH('')
                     ), 1, 1, '')
                        
                                    
SET @SQL = N'SELECT ReferredFrom, ' + @Columns + '
FROM
(SELECT  ReferredFrom
      , ImpressionCount
      , CONVERT(VARCHAR,tStamp,105) tStamp
FROM    CrossTab) p
PIVOT
(
SUM(ImpressionCount)
FOR tStamp IN
( ' + @Columns + ' )
) AS pvt
'

EXEC ( @SQL
    )

Ref : Using Pivot and Unpivot

0
 
LVL 15

Expert Comment

by:Anuj
ID: 36585685
0
 

Author Comment

by:koossa
ID: 36586107
Isn't there a way of doing if with a select query?
I want to use it in my software using a select query?
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 15

Accepted Solution

by:
Anuj earned 500 total points
ID: 36586377
This is dynamic Pivot query, you can create a stored procedure and include this code inside the stored procedure, later you can call the stored procedure in your application.
0
 
LVL 39

Expert Comment

by:lcohan
ID: 36587380
You can do it like in the example below by usint a temp table instead:

CREATE TABLE #test_table
        (
        Company  VARCHAR(3),
        Year     SMALLINT,
        Quarter  TINYINT,
        Amount   DECIMAL(2,1),
        Quantity DECIMAL(2,1)
        )
GO
 INSERT INTO #test_table
        (Company,Year, Quarter, Amount, Quantity)
 SELECT 'ABC', 2006, 1, 1.1, 2.2 UNION ALL
 SELECT 'ABC', 2006, 2, 1.2, 2.4 UNION ALL
 SELECT 'ABC', 2006, 3, 1.3, 1.3 UNION ALL
 SELECT 'ABC', 2006, 4, 1.4, 4.2 UNION ALL
 SELECT 'ABC', 2007, 1, 2.1, 2.3 UNION ALL
 SELECT 'ABC', 2007, 2, 2.2, 3.1 UNION ALL
 SELECT 'ABC', 2007, 3, 2.3, 2.1 UNION ALL
 SELECT 'ABC', 2007, 4, 2.4, 1.5 UNION ALL
 SELECT 'ABC', 2008, 1, 1.5, 5.1 UNION ALL
 SELECT 'ABC', 2008, 3, 2.3, 3.3 UNION ALL
 SELECT 'ABC', 2008, 4, 1.9, 4.2 UNION ALL
 SELECT 'XYZ', 2006, 1, 2.1, 3.6 UNION ALL
 SELECT 'XYZ', 2006, 2, 2.2, 1.8 UNION ALL
 SELECT 'XYZ', 2006, 3, 3.3, 2.6 UNION ALL
 SELECT 'XYZ', 2006, 4, 2.4, 3.7 UNION ALL
 SELECT 'XYZ', 2007, 1, 3.1, 1.9 UNION ALL
 SELECT 'XYZ', 2007, 2, 1.2, 1.2 UNION ALL
 SELECT 'XYZ', 2007, 3, 3.3, 4.2 UNION ALL
 SELECT 'XYZ', 2007, 4, 1.4, 4.0 UNION ALL
 SELECT 'XYZ', 2008, 1, 2.5, 3.9 UNION ALL
 SELECT 'XYZ', 2008, 2, 3.5, 2.1 UNION ALL
 SELECT 'XYZ', 2008, 3, 1.3, 3.9 UNION ALL
 SELECT 'XYZ', 2008, 4, 3.9, 3.4
GO


SELECT Company,
        Year,
        SUM(CASE WHEN Quarter = 1 THEN Amount   ELSE 0 END) AS Q1Amt,
        SUM(CASE WHEN Quarter = 1 THEN Quantity ELSE 0 END) AS Q1Qty,
        SUM(CASE WHEN Quarter = 2 THEN Amount   ELSE 0 END) AS Q2Amt,
        SUM(CASE WHEN Quarter = 2 THEN Quantity ELSE 0 END) AS Q2Qty,
        SUM(CASE WHEN Quarter = 3 THEN Amount   ELSE 0 END) AS Q3Amt,
        SUM(CASE WHEN Quarter = 3 THEN Quantity ELSE 0 END) AS Q3Qty,
        SUM(CASE WHEN Quarter = 4 THEN Amount   ELSE 0 END) AS Q4Amt,
        SUM(CASE WHEN Quarter = 4 THEN Quantity ELSE 0 END) AS Q4Qty,
        SUM(Amount)   AS TotalAmt,
        SUM(Quantity) AS TotalQty
   FROM #test_table
  GROUP BY Company, Year
  ORDER BY Company, Year


0
 

Author Closing Comment

by:koossa
ID: 36595378
Thank you
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Introduced in Microsoft SQL Server 2005, the Copy Database Wizard (http://msdn.microsoft.com/en-us/library/ms188664.aspx) is useful in copying databases and associated objects between SQL instances; therefore, it is a good migration and upgrade tool…
Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now