SQL 将横向数据转为纵向记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 将横向数据转为纵向记录相关的知识,希望对你有一定的参考价值。

如下表
编号 规格A 数量A 规格B 数量B 规格C 数量C
001 28*14 150 26*18.5 1242
002 26.5*21 1458 28.5*21 756 28*18.5 666

转换为:

编号 规格 数量
001 28*14 150
001 26*18.5 1242
002 26.5*21 1458
002 28.5*21 756
002 28*18.5 666
那还有个表 如下, 如何把他们链起来呢?
编号 规格 名称
001 28*14 aaa
001 26*18.5 aaa
002 26.5*21 bbb
002 28.5*21 bbb
002 28*18.5 bbb

使用union连接SQL语句,可以实现常见的SQL行转列运用。

以图中表格为例:


转为列的结果,如图:


需要注意,如果有需要显示重复记录,把union 改成 union all

参考技术A SELECT t1.编号, t1.规格, t2.名称
FROM (SELECT 编号, 规格A AS 规格, 数量A FROM tab
UNION ALL
SELECT 编号, 规格B AS 规格, 数量B FROM tab
UNION ALL
SELECT 编号, 规格C AS 规格, 数量C FROM tab) t1
INNER JOIN t2
ON t1.编号 = t2.编号 AND t1.规格 = t2.规格追问

如果将结果"编号, 规格"进行分组统计,那应该怎么写呢?
参:
http://zhidao.baidu.com/question/255442104.html?fr=middle_ask#replyask-4918791

追答

什么数据库?SQL SERVER 2005以上/ db2/ oracle/mysql都好办。

回答你那边了

追问

SQL2008

追答

SELECT 编号, 规格,
MAX(CASE WHEN rk = 1 THEN (名称+'/') ELSE '' END)
+ MAX(CASE WHEN rk = 1 THEN (名称+'/') ELSE '' END)
+ MAX(CASE WHEN rk = 1 THEN (名称+'/') ELSE '' END)
FROM (SELECT 编号, 规格, 名称,
ROW_NUMBER() OVER(PARTITION BY 编号, 规格 ORDER BY 名称) rk
FROM tab ) t
GROUP BY 编号, 规格

最后面会多一个/,用SUBSTR就可以取掉了

本回答被提问者采纳

UISearchBar 横向宽度错误

【中文标题】UISearchBar 横向宽度错误【英文标题】:UISearchBar width wrong in landscape 【发布时间】:2011-06-24 11:08:35 【问题描述】:

当您以横向模式开始时,我的搜索栏向右拉伸得有点过远。如果然后旋转到纵向模式,它仍然有点太宽。但是,如果您以纵向模式开始,然后将其旋转为横向,则很好。这是我的代码。

sBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[sBar sizeToFit];
sBar.delegate = self;
sBar.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin;
[self.view addSubview:sBar];

【问题讨论】:

你可以在sizeToFit 通话后做NSLog(@"%@", NSStringFromCGRect(sBar.frame)); 吗? sBar 的宽度比框架的宽度大 20 - sBar 0, 0, 320, 44 框架 0, 0, 300, 480 顺便说一下,宽度是320,和frame一样... sBar 0, 0, 320, 44 Frame 0, 0, 320, 460 嗯。实际上这些数字并没有加起来,因为肯定在横向它应该比纵向宽得多 【参考方案1】:

答案是在运行其余代码之前将搜索栏添加到视图中。

UISearchBar * tempSBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
self.sBar = tempSBar;
[tempSBar release];

[self.view addSubview:sBar];
[sBar sizeToFit];
sBar.delegate = self;
sBar.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin;

【讨论】:

顺便说一句,我是否正确创建临时搜索栏,将其设为我的搜索栏,然后释放临时栏? (请记住,我的搜索栏已设置为 @property 保留)。这是没有意义的还是必要的?我对目标 c 和内存管理还很陌生。【参考方案2】:
UIViewAutoresizingFlexibleRightMargin 

将它添加到 sBar.autoresizingMask,我和其他 2 个一样,没有问题。如果您使用的是 IB,请确保其中的宽度也正确

【讨论】:

我试过了,但令我惊讶的是它没有任何区别:S。顺便说一句,我没有在这个屏幕上使用 IB。【参考方案3】:

我知道这已经过时且已被弃用,但我不得不分享。我寻找适合我的情况的解决方案。我尝试了所有建议,但无济于事。然后我偶然发现了这个宝石

// Update search bar frame.
CGRect superviewFrame = self.searchDisplayController.searchBar.superview.frame;
superviewFrame.origin.y = 0.f;
self.searchDisplayController.searchBar.superview.frame = superviewFrame;

一切又变得美好而阳光明媚。谢谢彼得 http://petersteinberger.com/blog/2013/fixing-uisearchdisplaycontroller-on-ios-7/

【讨论】:

以上是关于SQL 将横向数据转为纵向记录的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 将纵向视频旋转为横向

在 ios6 和 ios7 的 MPMoviePlayerViewController 中将横向旋转为纵向

iAds 从一开始就以横向显示纵向

有没有办法让 PayPal 网络视图旋转为横向模式?

纵向而不是横向的自动布局方向更改

一个视图控制器ios的横向方向