在保持Distinct结果的同时连接nvarchar和int

时间:2014-01-15 16:47:20

标签: sql sql-server sql-server-2008-r2

我正在尝试计算每个品牌的所有商品,并连接品牌名称+商品数量。

我在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. 如果我使用转换我遇到问题(Distinct)
  3. 有任何帮助吗? :)

3 个答案:

答案 0 :(得分:1)

检索您要查找的字段两次,一次在连接字段答案中,一次单独检索。这应该可以解决您使用DISTINCT的问题。

答案 1 :(得分: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

答案 2 :(得分:0)

连接前转换为varchar

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