2014-01-15 63 views
1

我試圖計算每個品牌的所有項目並連接品牌名稱+項目數量。連接nvarchar和int,同時保持不同的結果

我有這個疑問在SQL Server 2008 R2:

SELECT DISTINCT 
    Brands.BrandName + ' ' + COUNT(Items.ITEMNO) as ITEMSNO, 
    Brands.BrandId 
FROM Items, Brand_Products, Brands 
WHERE  
    Items.ITEMNO=Brand_Products.ItemNo 
    AND Brands.BrandId=Brand_Products.BrandId 
    AND Items.SubcategoryID='SCat-020' 
GROUP BY 
    Brands.BrandId, 
    Brands.BrandName, 
    Items.ITEMNO 

我試圖來連接2場,但我有2個問題:如果我這樣做,如圖

  1. 我示例這裏我有一個nvarcharint的問題。
  2. 如果我使用轉換我有(不同)

任何幫助的問題嗎? :)

回答

1

這會工作,你可以根據CTE中的BrandId計數物品,並將其與品牌表一起加入。

WITH ItemCount 
     AS (SELECT BrandId 
       ,COUNT(Items.ITEMNO) AS item_Count 
      FROM Items 
       ,Brand_Products 
       ,Brands 
      WHERE Items.ITEMNO = Brand_Products.ItemNo 
       AND Brands.BrandId = Brand_Products.BrandId 
       AND Items.SubcategoryID = 'SCat-020' 
      GROUP BY Brands.BrandId) 
SELECT b.BrandName + ' ' + CONVERT(VARCHAR(5), Item_Count) 
    FROM Brands AS b 
    JOIN ItemCount AS I 
     ON b.BrandId = i.BrandId 
+0

感謝您的幫助,它工作正常! – Sam

+0

只是一個問題,是否可以選擇BrandId字段和串聯的字符串? – Sam

+1

是的,只需改變'select b.brandid,b.BrandName +''+ CONVERT(VARCHAR(5),Item_Count)' – 2014-01-15 18:31:19

0

轉換爲varchar串聯

'Whatever ' + CONVERT(VARCHAR(8), COUNT(Items.ITEMNO)) + ' Whatever ' 
+0

切勿使用沒有長度參數的'varchar'。這是很危險的,因爲默認在不同的環境下是不同的。 –

+0

感謝您的快速回答,它工作正常,但不同的總是給我1,而不是每個品牌5。 我無法刪除不同的,因爲它會重複每個項目的品牌名稱! – Sam

1

找回你要找的兩次前場,曾在級聯場的答案,而一旦自身。這應該通過DISTINCT解決您的問題。