September 16, 2012 at 1:44 pm
Hi,
Messing around withn SQL queries on a Sunday, so I have another question (posted my fist one this morning). This time, its about the way the data is set out in the returned Table. I am working with SQL Server 2008 R2 and using Microsoft SQL Management Studio. So I'm looking at the way the table is displayed when I execute my query.
The query in question is pulling Lookup Table names and values from the Project Server 2010 ProjectServer_Published database. The query is listed below:
USE ProjectServer_Published
SELECT l.LT_NAME AS Table_Name,
MSP_LOOKUP_TABLE_VALUES_PUBLISHED_VIEW.LT_VALUE_TEXT AS 'Lookup Table Value'
FROM dbo.MSP_LOOKUP_TABLES_PUBLISHED_VIEW l INNER JOIN
dbo.MSP_LOOKUP_TABLE_VALUES_PUBLISHED_VIEW
ON l.LT_UID = MSP_LOOKUP_TABLE_VALUES_PUBLISHED_VIEW.LT_UID
WHERE l.LT_NAME = 'Project Status' OR
l.LT_NAME = 'Project Phase'
ORDER BY LT_NAME, 'Lookup Table Value'
The result of this query is:
[Code="plain"]
Table_NameLookup Table Value
Project PhaseBuild
Project PhaseClosure
Project PhaseImplementation
Project PhaseInitiate
Project PhasePlan
Project PhaseTransition
Project StatusCancelled
Project StatusComplete
Project StatusIn Progress
Project StatusLogged
Project StatusOn Hold
[/code]
Is there a way to change the query so that I can have each 'Table_Name' displayed as the column header and the values displayed in the column below each Table_Name?
Any suggestions on how I would go about doing this would be appreciated.
Cheers,
Wayne
September 16, 2012 at 2:06 pm
Read up on the PIVOT keyword.
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
September 16, 2012 at 3:32 pm
wwalkerbout (9/16/2012)
Hi,Messing around withn SQL queries on a Sunday, so I have another question (posted my fist one this morning). This time, its about the way the data is set out in the returned Table. I am working with SQL Server 2008 R2 and using Microsoft SQL Management Studio. So I'm looking at the way the table is displayed when I execute my query.
The query in question is pulling Lookup Table names and values from the Project Server 2010 ProjectServer_Published database. The query is listed below:
USE ProjectServer_Published
SELECT l.LT_NAME AS Table_Name,
MSP_LOOKUP_TABLE_VALUES_PUBLISHED_VIEW.LT_VALUE_TEXT AS 'Lookup Table Value'
FROM dbo.MSP_LOOKUP_TABLES_PUBLISHED_VIEW l INNER JOIN
dbo.MSP_LOOKUP_TABLE_VALUES_PUBLISHED_VIEW
ON l.LT_UID = MSP_LOOKUP_TABLE_VALUES_PUBLISHED_VIEW.LT_UID
WHERE l.LT_NAME = 'Project Status' OR
l.LT_NAME = 'Project Phase'
ORDER BY LT_NAME, 'Lookup Table Value'
The result of this query is:
[Code="plain"]
Table_NameLookup Table Value
Project PhaseBuild
Project PhaseClosure
Project PhaseImplementation
Project PhaseInitiate
Project PhasePlan
Project PhaseTransition
Project StatusCancelled
Project StatusComplete
Project StatusIn Progress
Project StatusLogged
Project StatusOn Hold
[/code]
Is there a way to change the query so that I can have each 'Table_Name' displayed as the column header and the values displayed in the column below each Table_Name?
Any suggestions on how I would go about doing this would be appreciated.
Cheers,
Wayne
Not sure what you want for an output on this, Wayne. Could you post your result above as you'd actualy like to see it?
--Jeff Moden
Change is inevitable... Change for the better is not.
September 16, 2012 at 4:08 pm
Hi Gail, Jeff,
Gail: Thanks for the tip. Pivoting the data certainly sounds like what I am after. I'll take a look at that behavior.
Jeff: The result set I would like is as follows:
Project PhaseProject Status
---------------------------
BuildCancelled
ClosureComplete
ImplementationIn Progress
InitiateLogged
PlanOn Hold
Transition
I appreciate your feedback.
Cheers,
Wayne
September 16, 2012 at 6:50 pm
How about something like this?
;WITH PriorQueryResults AS (
SELECT Table_Name='Project Phase', [Lookup Table Value]= 'Build'
UNION ALL SELECT 'Project Phase','Closure'
UNION ALL SELECT 'Project Phase','Implementation'
UNION ALL SELECT 'Project Phase','Initiate'
UNION ALL SELECT 'Project Phase','Plan'
UNION ALL SELECT 'Project Phase','Transition'
UNION ALL SELECT 'Project Status','Cancelled'
UNION ALL SELECT 'Project Status','Complete'
UNION ALL SELECT 'Project Status','In Progress'
UNION ALL SELECT 'Project Status','Logged'
UNION ALL SELECT 'Project Status','On Hold'
),
AddRowNum AS (
SELECT Table_Name, [Lookup Table Value]
,n=ROW_NUMBER() OVER (PARTITION BY Table_Name ORDER BY [Lookup Table Value])
FROM PriorQueryResults
)
SELECT [Project Phase]=MAX(CASE Table_Name WHEN 'Project Phase' THEN [Lookup Table Value] ELSE '' END)
,[Project Status]=MAX(CASE Table_Name WHEN 'Project Status' THEN [Lookup Table Value] ELSE '' END)
FROM AddRowNum
GROUP BY n
My thought question: Have you ever been told that your query runs too fast?
My advice:
INDEXing a poor-performing query is like putting sugar on cat food. Yeah, it probably tastes better but are you sure you want to eat it?
The path of least resistance can be a slippery slope. Take care that fixing your fixes of fixes doesn't snowball and end up costing you more than fixing the root cause would have in the first place.
Need to UNPIVOT? Why not CROSS APPLY VALUES instead?[/url]
Since random numbers are too important to be left to chance, let's generate some![/url]
Learn to understand recursive CTEs by example.[/url]
[url url=http://www.sqlservercentral.com/articles/St
September 16, 2012 at 8:20 pm
Hi Dwain,
Thanks very much for going to the trouble of setting this all out for me. I'm very new (well, very rusty after 15 years of non-use), to playing with SQL Queries again and any such help as this is a big step forward for me.
Very much appreciated. I'll test it out with my scenario when I get to the office tomorrow.
Cheers,
Wayne
Viewing 6 posts - 1 through 5 (of 5 total)
You must be logged in to reply to this topic. Login to reply