?
Solved

SQL rewrite

Posted on 2011-09-08
7
Medium Priority
?
366 Views
Last Modified: 2012-05-12

I have the SQl query below which list the stores

Whenever i get "All city types" in the citytypename fields , i DO NOT need to list the other rows for the
particular storelocationid

Result

71      8      0      All City Types      West      Dhanalakshmi store          All Cities      All States
71      8      1      Tier 2              West      Dhanalakshmi store          Bangalore      Karnataka
71      8      2      Tier 2                    West      Dhanalakshmi store   Ahmedabad      Gujarat      


how i will rewrite my query for this?

SELECT  LL.StoreLocationID
       ,LC.[StoreID]
       ,ISNULL(LC.CityID,0) CityID
       ,ISNULL(C.CityTypeName,'All City Types') CityTypeName
       ,ISNULL(LL.RegionName,'All Regions') RegionName
       ,L.[Name] StoreName
       ,ISNULL(C.Name,'All Cities') AS CityName
       ,ISNULL(S.Name, 'All States') AS StateName
FROM [StoreCity] LC
		INNER JOIN [Store] L ON L.[StoreID] = LC.[StoreID] 
		INNER JOIN [StoreLocation] LL ON LL.StoreID=LC.StoreID
		LEFT OUTER JOIN [City] C ON LC.CityID = C.CityID
		LEFT OUTER JOIN [State] S ON C.StateID = S.StateID
		where StoreLocationID =  71

Open in new window

0
Comment
Question by:PeteEngineer
  • 3
  • 3
7 Comments
 
LVL 10

Expert Comment

by:OnALearningCurve
ID: 36503131
Hi PeteEngineer,

How about the code attached

HTH,

Mark.
SELECT  LL.StoreLocationID
       ,LC.[StoreID]
       ,ISNULL(LC.CityID,0) CityID
       ,ISNULL(C.CityTypeName,'All City Types') CityTypeName
       ,CASE( WHEN (C.CityTypeName IS NULL) THEN (ISNULL(LL.RegionName,'All Regions')) ELSE NULL END) RegionName
       ,CASE( WHEN (C.CityTypeName IS NULL) THEN (L.[Name]) ELSE NULL END) StoreName
       ,CASE( WHEN (C.CityTypeName IS NULL) THEN (ISNULL(C.Name,'All Cities')) ELSE NULL END) AS CityName
       ,CASE( WHEN (C.CityTypeName IS NULL) THEN (ISNULL(S.Name, 'All States')) ELSE NULL END) AS StateName
FROM [StoreCity] LC
		INNER JOIN [Store] L ON L.[StoreID] = LC.[StoreID] 
		INNER JOIN [StoreLocation] LL ON LL.StoreID=LC.StoreID
		LEFT OUTER JOIN [City] C ON LC.CityID = C.CityID
		LEFT OUTER JOIN [State] S ON C.StateID = S.StateID
		where StoreLocationID =  71

Open in new window

0
 
LVL 61

Expert Comment

by:Kevin Cross
ID: 36503243
You can try a NOT EXISTS. Let's start with an OR in single query. Other option might be to use UNION where you select just the 'all city types' rows and then join in those other cities where there does not exist an 'all city types' row for that store location ID.

Let me know how this works:
SELECT  LL.StoreLocationID
       ,LC.[StoreID]
       ,ISNULL(LC.CityID,0) CityID
       ,ISNULL(C.CityTypeName,'All City Types') CityTypeName
       ,ISNULL(LL.RegionName,'All Regions') RegionName
       ,L.[Name] StoreName
       ,ISNULL(C.Name,'All Cities') AS CityName
       ,ISNULL(S.Name, 'All States') AS StateName
FROM [StoreCity] LC
	INNER JOIN [Store] L ON L.[StoreID] = LC.[StoreID] 
	INNER JOIN [StoreLocation] LL ON LL.StoreID=LC.StoreID
	LEFT OUTER JOIN [City] C ON LC.CityID = C.CityID
	LEFT OUTER JOIN [State] S ON C.StateID = S.StateID
WHERE StoreLocationID =  71
AND (
   /* current row is 'All City Types' */
   C.CityTypeName IS NULL
   OR 
   /* current row is not 'All City Types', 
      but there does not exist another row that is. */
   NOT EXISTS (
      SELECT 1
	  FROM [StoreLocation] LL2 ON LL2
	  INNER JOIN [StoreCity] LC2 ON LC2.[StoreID] = LL2.[StoreID]
	  INNER JOIN [City] C2 ON C2.[CityID] = LC2.[CityID]
	  WHERE LL2.StoreLocationID = LL.StoreLocationID
	  AND C2.CityTypeName IS NULL
   )
)

Open in new window

0
 
LVL 8

Author Comment

by:PeteEngineer
ID: 36507804
:OnALearning…:

I am getting this error

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'WHEN'.
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 8

Author Comment

by:PeteEngineer
ID: 36507813
mwvisa1: I am getting the following error :


Msg 156, Level 15, State 1, Line 23
Incorrect syntax near the keyword 'ON'.
0
 
LVL 8

Author Comment

by:PeteEngineer
ID: 36507816
I have remove the ON statement,so the query is working .....


but there is no change in the query results i posted above
0
 
LVL 61

Expert Comment

by:Kevin Cross
ID: 36507821
Sorry, I started to type this with [City] table first, then thought it may not be needed and in my shifting around I did not get rid of an ON clause. Just delete it.

i.e., run like this:

SELECT  LL.StoreLocationID
       ,LC.[StoreID]
       ,ISNULL(LC.CityID,0) CityID
       ,ISNULL(C.CityTypeName,'All City Types') CityTypeName
       ,ISNULL(LL.RegionName,'All Regions') RegionName
       ,L.[Name] StoreName
       ,ISNULL(C.Name,'All Cities') AS CityName
       ,ISNULL(S.Name, 'All States') AS StateName
FROM [StoreCity] LC
	INNER JOIN [Store] L ON L.[StoreID] = LC.[StoreID] 
	INNER JOIN [StoreLocation] LL ON LL.StoreID=LC.StoreID
	LEFT OUTER JOIN [City] C ON LC.CityID = C.CityID
	LEFT OUTER JOIN [State] S ON C.StateID = S.StateID
WHERE StoreLocationID =  71
AND (
   /* current row is 'All City Types' */
   C.CityTypeName IS NULL
   OR 
   /* current row is not 'All City Types', 
      but there does not exist another row that is. */
   NOT EXISTS (
      SELECT 1
	  FROM [StoreLocation] LL2
	  INNER JOIN [StoreCity] LC2 ON LC2.[StoreID] = LL2.[StoreID]
	  INNER JOIN [City] C2 ON C2.[CityID] = LC2.[CityID]
	  WHERE LL2.StoreLocationID = LL.StoreLocationID
	  AND C2.CityTypeName IS NULL
   )
)

Open in new window

0
 
LVL 61

Accepted Solution

by:
Kevin Cross earned 2000 total points
ID: 36507827
If that is the case, then there is probably something in the NOT EXISTS joins that is not right. The basics is you need to pick rows that qualify as 'All City Types' or choose those rows where there doesn't exist another row over whatever criteria you set that doesn't qualify as an 'All City Types' row. Maybe it can't be linked by StoreLocationID?
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

This post looks at MongoDB and MySQL, and covers high-level MongoDB strengths, weaknesses, features, and uses from the perspective of an SQL user.
In this article, we will show how to detach and attach a database and then show how to repair a corrupt database and attach it, If it has some errors. We will show how to detach and attach using SSMS or using T-SQL sentences.
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Stellar Phoenix SQL Database Repair software easily fixes the suspect mode issue of SQL Server database. It is a simple process to bring the database from suspect mode to normal mode. Check out the video and fix the SQL database suspect mode problem.

589 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