Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
DB Engine
SQL ServerMSDESQL Server CE
Services
Analysis (Data Mining)Analysis (OLAP)DTSIntegration ServicesNotification ServicesReporting Services
Programming
CLRConnectivitySQLXML
Other Technologies
ClusteringEnglish QueryFull-Text SearchReplicationService Broker
General
Data WarehousingPerformanceSecuritySetupSQL Server ToolsOther SQL Server Topics
DirectoryUser Groups
Related Topics
MS AccessOther DB ProductsMS Server Products.NET DevelopmentVB DevelopmentJava DevelopmentMore Topics ...

SQL Server Forum / General / Other SQL Server Topics / February 2008

Tip: Looking for answers? Try searching our database.

Query - select common data from one column and display in several     columns

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
rui dias - 28 Feb 2008 10:46 GMT
Hello,

I have a (big) table which is not normalized, but for i need at the
moment i think
that's no problem. Indeed, what i would like to do is to select the
name field and
the note. The problem is that i want to display the note in 2
different columns.
the first columns will show the number (count) of time that a certain
note (e.g note=4)
appears for a certain name and in the other column the same thing but
for a different note value.

so each column noteX will display the number of time that the note
with the value X appears for each name

for example, to the following table:

 Name  |  note  |  job  |  city  | id  |
----------------------------------------
john   |   4    |  jb1  | hamb   |  1  |
john   |   5    |  jb2  | hamb   |  2  |
john   |   5    |  jb3  | hamb   |  3  |
john   |   5    |  jb4  | hamb   |  4  |
Mark   |   4    |  jb1  | mun    |  5  |
Mark   |   4    |  jb2  | mun    |  6  |
Mark   |   4    |  jb5  | mun    |  7  |
Mark   |   5    |  jb1  | mun    |  8  |
peter  |   5    |  jb3  | berl   |  9  |
peter  |   5    |  jb5  | berl   | 10  |
frank  |   4    |  jb6  | v.form | 11  |
frank  |   5    |  jb3  | v.form | 12  |
frank  |   5    |  jb2  | v.form | 13  |

the result should be:

 Name  |  note5 | note4 |
-------------------------
john   |   3    |  1    |
Mark   |   1    |  3    |
peter  |   2    |  0    |
frank  |   2    |  1    |

How should be the right SQL command to show the data i want?

Rui Dias
rldias@gmail.com

Thanks a lot
Mark - 28 Feb 2008 10:56 GMT
select Name,
      sum(case when note=5 then 1 else 0 end) as note5,
      sum(case when note=4 then 1 else 0 end) as note4
from mytable
group by Name
rui dias - 28 Feb 2008 11:30 GMT
> select Name,
>        sum(case when note=5 then 1 else 0 end) as note5,
>        sum(case when note=4 then 1 else 0 end) as note4
> from mytable
> group by Name

Hello Mark,

Thanks a lot for your answer.

It is really nice!
I didn't know the command "case when filed=value then X else Y end"

Really nice! ;)
Dan Guzman - 28 Feb 2008 12:18 GMT
> I didn't know the command "case when filed=value then X else Y end"

Note that a SQL CASE is an expression rather than a command (as in some
other languages).  You can use it where expressions are allowed in SQL.

Signature

Hope this helps.

Dan Guzman
SQL Server MVP
http://weblogs.sqlteam.com/dang/

>> select Name,
>>        sum(case when note=5 then 1 else 0 end) as note5,
[quoted text clipped - 10 lines]
>
> Really nice! ;)
czytacz - 28 Feb 2008 11:25 GMT
not simple,
but possible is to use pivot/unpivot
Plamen Ratchev - 28 Feb 2008 13:18 GMT
Here is a version with the PIVOT operator in SQL Server 2005:

SELECT [name],
         SUM([5]) AS note5,
         SUM([4]) AS note4
FROM Foo
PIVOT (COUNT(note) FOR note IN ([5], [4])) AS P
GROUP BY [name];

HTH,

Plamen Ratchev
http://www.SQLStudio.com
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.