Solved

SQL - select

Posted on 2015-02-23
3
52 Views
Last Modified: 2015-03-09
I want to list all productname for each column. A list of productname is on table2. There are about 50 of them.
Instead of using case (50 times or more) like below, is there a better way of query it?


select

tb1.producttype,
case productname when "productname1" then tbl2.shipped * quantity as productname1 else 0 end) productname1,
case productname when "productname2" then tbl2.shipped * quantity as productname1 else 0 end) productname2,
case productname when "productname3" then tbl2.shipped * quantity as productname1 else 0 end) productname3,
...
case productname = "productname50" then tbl2.shipped * quantity as productname1 else 0 end) productname50,
tb1.shippedto,
tbl1.Customername


from table1 tb1
inner join table2 tbl2
on tb1.id = tbl2.id
0
Comment
Question by:VBdotnet2005
  • 2
3 Comments
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40627248
You could consider using PIVOT instead of the case expression approach

BUT (in my opinion)

the case expression approach can do stuff rather easily that is very hard to achieve using PIVOT

The very best way of proceeding is for you to supply some "sample data" and an "expected result"

nb:
sample might only be 4 columns, not 50, and just a couple of rows.
a good example of this is shown at the link provided above.
0
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40627258
when pivoting data using SQL, the column names (bold) are "hard coded"

select
tb1.producttype,
case productname when 'ABC123' then tbl2.shipped * quantity else 0 end) ABC123,
case productname when '123XYZ' then tbl2.shipped * quantity else 0 end) 123XYZ,
case productname when 'BLAH17' then tbl2.shipped * quantity else 0 end) BLAH17,
...
case productname = 'ETCETC50' then tbl2.shipped * quantity else 0 end) ETCETC50,

But you could concatenate them into a query from variables using C#
Otherwise you would need "dynamic sql"

This comment is true with the PIVOT operator and/or case expression approaches.
0
 
LVL 45

Accepted Solution

by:
Vitor Montalvão earned 500 total points
ID: 40627960
Why not use a GROUP BY clause?
select 
 tb1.producttype,
productname,
 SUM(tbl2.shipped * quantity),
 tb1.shippedto,
 tbl1.Customername
 from table1 tb1
 inner join table2 tbl2
 on tb1.id = tbl2.id
group by  tb1.producttype, productname

Open in new window

0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

In this article I will describe the Detach & Attach method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

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

22 Experts available now in Live!

Get 1:1 Help Now