【问题标题】:SQL - summarize all Product Types from a list of AuthorizedSQL - 从授权列表中汇总所有产品类型
【发布时间】:2017-11-04 10:38:05
【问题描述】:

我试图弄清楚如何显示每个客户可以向我们下达的订单类型。我们有以下表格 CLIENTS、CLIENT_SERVICE_TYPE、SERVICE_TYPES、PRODUCT_TYPE

我们有许多服务类型可以很容易地与水果和蔬菜相关联。

CLIENTS - 列出我们所有的客户
CLIENT_SERVICE_TYPE - 列出他们有权放置的所有服务类型(苹果、梨、香蕉、南瓜、鸡肉)。
SERVICE_TYPES - 列出我们提供的成百上千种水果和蔬菜(其中,每个客户只能订购其中的几个。
PRODUCT_TYPE 列出了我们提供的 5 个类别(即水果、蔬菜、香料、乳制品、肉类)

我希望能够创建一个汇总报告,以显示某些这样的客户

公司名称 |销售代表 | 产品类型
公司ABC |简·史密斯 | 水果
公司 XYZ |乔土豚 | 蔬菜、水果
公司 123 |艾米亚当斯 | 肉类、蔬菜、水果

在上面的示例中,ABC 公司有 15 种授权水果(香蕉、苹果、橙子等),但其在一行水果中汇总为 1。 XYZ 公司拥有相同的 15 个授权水果和 1 个胡萝卜。我希望它在同一行显示为 Vegetables, Fruits(顺序无关紧要)。公司 123 仅被授权提供 4 种服务(鸡肉、香蕉、豌豆和南瓜)。 肉类、蔬菜、水果

我知道这可能很容易找到现有教程,但我的术语显然达不到标准。据我所知,您可能已经猜到了,它显示了多行它们被批准的 X 数量的服务类型。

SELECT
    company [Client Name]
    ,salesperson [Sales Rep]
    --,pt.productTypeName [List of approved Product Types]
    FROM CLIENT cl (NOLOCK)
        LEFT JOIN
    CLIENT_SERVICE_TYPE cst (NOLOCK) = cl.client_key = cst.client_key
        LEFT JOIN
    SERVICE_TYPE st (NOLOCK) = cst.service_key = st.service_key
        LEFT JOIN
    PRODUCT_TYPE pt (NOLOCK) = cst.productTypeId = pt.productTypeId
WHERE cl.client_program_id in (1,2,3)
    and status = 160
ORDER BY company

【问题讨论】:

  • 你试过GROUP BY吗?如果您需要在单个列中包含多个行值,您可能还需要 PIVOT 或子查询。
  • 我尝试了 Group By,这似乎是我想要完成的部分,但不是全部。在我上面的例子中,结果就像这个公司 XYZ |乔土豚 | 蔬菜 公司 XYZ |乔土豚 | 水果
  • 我找到了promising link,我可以在其中使用最后的 GROUP BY 将数据组合成一个值。它并没有 100% 完成我想做的事情,但如果距离不够近,该死的
  • 使用 INNERMJOIN 和 GROUP BY 然后向我们展示输出

标签: sql sql-server-2008 summary


【解决方案1】:

通过反复试验找到了答案。在 SELECT 语句中,我就是这样做的

SELECT
company as [Company Name]
,salesperson as [Sales Rep]
,(STUFF((SELECT CAST(', ' + productTypeName AS VARCHAR(MAX))
    FROM CLIENT_SERVICE_TYPE cst
        LEFT JOIN
    SERVICE_TYPE st on cst.service_type_key = st.service_type_key
        LEFT JOIN
    PRODUCT_TYPE pt on st.product_type_key = pt.product_type_key
    WHERE c.client_key = cst.client_key
    GROUP BY pt.product_type_name
    FOR XML PATH ('')),1,2, '')) [Product Types]
FROM CLIENT c

最终结果
公司名称 |销售代表 |产品类型
公司ABC |简·史密斯 | 水果
公司 XYZ |乔土豚 | 蔬菜、水果
公司 123 |艾米亚当斯 | 肉类、蔬菜、水果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 2019-12-26
    • 2021-10-27
    • 2014-04-28
    • 2015-03-21
    • 2021-03-07
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多