2017-08-24 30 views
-1

我試圖解決這個問題,當我遇到某個特定區域的銷售時,我需要創建另一個列作爲結果SUM通過名稱stores,以便它可以判斷該特定商店是否在該地區(東,西,北,南)。如何在SQL中檢查某個列的特定值是否出現多次

我不知道從哪裏開始 這是兩個表和輸出: enter image description here

+1

這裏被認爲是非常粗魯的發佈數據和結果的圖像而不是文本。此外,這意味着你很難得到一個好的答案,因爲不是每個閱讀Stack Overflow的人都能看到你的圖像。 –

+1

請以文本格式分享您的數據和期望的輸出 – zarruq

+1

哦!,我的不好 看到這是我的第一個問題。 我在嘗試上傳文字。 –

回答

1

在MySQL中,你可以通過left join-ingstore_infogeography表和group byRegion如下柱實現你的結果。再次,你不需要SUM分別爲CASE

SELECT g.region, 
     sum(s.Sales) AS Sales, 
     CASE 
      WHEN Sales > 0 THEN 'Y' 
      ELSE 'N' 
     END AS Stores 
FROM geography g 
LEFT JOIN store_info s ON s.SN = g.SN 
GROUP BY g.Region 
ORDER BY 2 DESC 

結果

region Sales Stores 
---------------------- 
West 2050 Y 
East 700  Y 
South NULL N 
North NULL N 

您可以查看演示here

希望這會有所幫助。

1
SELECT r.Region_Name, SUM(s.Sales) Sales, 
    CASE WHEN COUNT(g.Store_Name) > 0 THEN 'Y' ELSE 'N' END Stores 
FROM (SELECT DISTINCT Region_name FROM Geography) r 
LEFT JOIN Geography g ON g.Region_Name = r.Region_Name 
LEFT JOIN Store_Information s ON s.Store_Name = g.Store_Name 
GROUP BY r.Region_Name 
1

注意:在你的問題,你都沒有提到的數據庫,所以我加入這個查詢在SQL Server版本中不適合MySQL。我刪除了問題標籤[sql-server]

這裏是你的代碼(SQL Server版本)

SELECT GE.[RegionName] AS [Region_Name] 
    ,ISNULL(SUM (SI.[NetSales]), 0) AS [NetSales] 
    ,CASE WHEN SUM (SI.[NetSales]) IS NULL THEN N'N' ELSE N'Y' END AS [Stores] 
FROM [DevDB].[dbo].[Geography] GE 
LEFT JOIN (SELECT StoreName, SUM([Sales]) AS [NetSales] 
    FROM [DevDB].[dbo].[Store_Information] 
    GROUP BY StoreName) SI 
ON SI.[StoreName] = GE.[StoreName] 
GROUP BY GE.[RegionName] 

輸出

enter image description here

1

假設這是SQL Server和銷售是一個NVARCHAR列。

SELECT DISTINCT 
     [Region_name], 
     ISNULL('$' + CAST(SUM(CAST(Sales as MONEY)) AS NVARCHAR(20)), '$0') Sales, 
     CASE WHEN SUM(CAST(Sales as MONEY)) > 0 
      THEN 'Y' 
      ELSE 'N' 
     END Stores 
FROM Geography geo 
LEFT JOIN Store_Information sto ON sto.Store_Name = geo.Store_name 
GROUP BY [Region_name] 
相關問題