首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用特殊编号从同一行输出两行

用特殊编号从同一行输出两行
EN

Stack Overflow用户
提问于 2020-12-08 00:01:42
回答 2查看 46关注 0票数 0

我有一种桌子产品

代码语言:javascript
复制
ID Company Product Weight Price Date
-- ------- ------- ------ ----- ----
1  555     blanket  3     10    20201207
2  555     blanket  7     45    20201208
3  555     blanket  8     33    20201208
4  123     pillow   7     66    20200901
5  999     pillow   5     55    20200902

我需要这样的输出

代码语言:javascript
复制
Company|Product|Unit Type|Unit Amount|Numbering
------- ------- --------- ----------  ----
555     blanket weight    3           2020-1
555     blanket price     10          2020-1
555     blanket weight    7           2020-2
555     blanket price     45          2020-2
555     blanket weight    8           2020-3
555     blanket price     33          2020-3
123     pillow  weight    7           2020-1
123     pillow  price     66          2020-1
999     pillow  weight    5           2020-1
999     pillow  price     55          2020-1

我有这个查询,但是在WHERE子句“多个部件标识符p1.id无法绑定”上出现了错误。也不知道如何做编号,它是多达10每产品和公司,并从2020年提取的日期。交叉应用似乎可以解决主要的问题,编号可能用ROW_NUMBER()来解决,但我还无法解决它。

代码语言:javascript
复制
SELECT 
    p1.company, 
    p1.product, 
    'weight', 
    p1.weight,
    (CONVERT(VARCHAR(4), p1.date, 112)) + '-',
FROM Products p1
UNION ALL
SELECT 
    p2.company, 
    p2.product, 
    'price', 
    p2.price,
    (CONVERT(VARCHAR(4), p2.date, 112)) + '-',
FROM Products p2
WHERE p1.id=p2.id
ORDER BY company
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-08 00:03:25

在Server中,您可以简单而有效地使用cross apply解除枢轴

代码语言:javascript
复制
select t.company, t.product, x.unit_type, x.amount, t.date
from mytable t
cross apply (values ('weight', weight), ('price', price)) as x(unit_type, amount)

可以使用dense_rank()生成序列号。

代码语言:javascript
复制
select t.company, t.product, x.unit_type, x.amount, 
    concat(year(t.date), '-', dense_rank() over(partition by t.company, t.product, year(t.date) order by t.date, t.id)) as rn
from mytable t
cross apply (values ('weight', weight), ('price', price)) as x(unit_type, amount)
票数 1
EN

Stack Overflow用户

发布于 2020-12-08 03:50:47

另一种选择是使用UNPIVOT,它可以保持代码非常干净。例如:

代码语言:javascript
复制
SELECT ID, Company, Product, Description, Value, Date
FROM (SELECT * FROM Products) p  
UNPIVOT
(
    Unit_Amount FOR Unit_Type IN (Weight, Price)  
) AS unpvt;  
GO  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65191224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档