【问题标题】:How to aggregate data into view with the same ID如何将数据聚合到具有相同 ID 的视图中
【发布时间】:2010-02-10 20:21:15
【问题描述】:

我有一个现有视图,该视图根据具有相同 product_id 的聚合选项名称返回以下格式的数据。视图名称是“vProdOptions”

option_name           product_id

XSMALL (2-6)          17854
SMALL (6-10)          17854
MEDIUM (10-14)      17854
LARGE                 18232

如何以这样的格式在聚合视图中返回这些数据?

  OPTIONS_AVAIL                                           Product_ID

  XSMALL (2-6), SMALL (6-10), MEDIUM (10-14)              127182

  SMALL (6-10), MEDIUM (10-14)                            166382

我正在使用 MS SQL 2k5。

我在这里根据这两个问题的 cmets 创建一个新问题。我意识到我需要一个视图。

Aggregate data from view as UDF to use in select statement

error with sql function creation

【问题讨论】:

标签: sql sql-server


【解决方案1】:

你可以选择不同的产品,然后cross apply它们在一个计算选项字符串的函数上:

select *
from (select distinct product_id from @t) a
cross apply (
    select option_name + ', ' as [text()]
    from @t b
    where a.product_id = b.product_id
    for xml path('')
) c ( Options )

-->

product_id   Options
17854        XSMALL (2-6), SMALL (6-10), MEDIUM (10-14), 
18232        LARGE, 

创建示例的代码:

declare @t table (option_name varchar(30), product_id int)

insert @t select 'XSMALL (2-6)', 17854
union all select 'SMALL (6-10)', 17854
union all select 'MEDIUM (10-14)', 17854
union all select 'LARGE', 18232

【讨论】:

  • 嗨 Andomar,我刚刚在我的样本集中包含了一小部分数据。有数百种选项会阻止您按照您描述的方式使用联合。
  • 嗨 Jeff:联合只是创建一个名为 @t 的测试表变量。要计算结果集,您只需要第一个查询。将@t 替换为您的选项表的名称
  • 很好用的 Andomar,非常感谢。有没有办法避免尾随逗号?
  • 干杯。您可以通过将 select * 替换为 select product_id, substring(Options,1,len(Options)-1) 来删除尾随逗号
【解决方案2】:

在 SQL 中,透视并不是一种非常有效的方法。就个人而言,我会不理会您的观点,并通过应用程序旋转数据。

【讨论】:

  • 请求的“特性”属于UI考虑,不是存储逻辑,所以用SQL做没有多大意义。
  • 当您旋转时,您将多行合并为一行。 F.e.一行 "date, value" 变成 "year, janValue, febValue, decValue, ..." 与这个问题完全无关?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多