【发布时间】: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