【问题标题】:Concatenate nvarchar and int while maintaining Distinct result在保持 Distinct 结果的同时连接 nvarchar 和 int
【发布时间】:2014-01-15 16:47:20
【问题描述】:

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

我在 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. 如果我使用 convert,我会遇到 (Distinct) 问题

有什么帮助吗? :)

【问题讨论】:

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


    【解决方案1】:

    这将起作用,首先您根据 CTE 中的 BrandId 计算项目,然后将其与 Brand 表连接。

    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
    

    【讨论】:

    • 只是一个问题,是否可以选择 BrandId 字段和连接的字符串?
    • 是的,只需更改select b.brandid, b.BrandName + ' ' + CONVERT(VARCHAR(5), Item_Count)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在连接之前转换为varchar

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

      【讨论】:

      • 永远不要使用没有长度参数的varchar。这很危险,因为在不同的上下文中默认值是不同的。
      • 感谢您的快速回答,它工作正常,但 distinct 总是给我 1 而不是每个品牌的 5。我无法删除 distinct 因为它会重复每件商品的品牌名称!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2023-01-26
      • 2012-05-28
      • 2013-06-08
      • 2015-10-03
      相关资源
      最近更新 更多