有难度的sql相同列值合并行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有难度的sql相同列值合并行相关的知识,希望对你有一定的参考价值。

原表:
商品名称 |长 |宽
商品1 100 110
商品1 100 110
商品1 110 100
商品2 100 110
商品2 110 110
商品2 110 120
商品2 110 120

要求结果为:商品名称,长,宽都相同则合并行(select distinct 商品名称,长,宽 from 原表 就可以,关键是后面的怎么处理)。 还有长为110宽为100 和 长为100宽为110的也要合并。

结果为:
商品名称 |长 |宽
商品1 100 110
商品2 100 110
商品2 110 110
商品2 110 120

呵呵,这是我的强项,应该需要用到两个关键字,unino与except
unino将记录联合起来,except将记录进行排除,
具体的SQL语句如下:
select distinct 商品名称,长,宽 --将所有不同的记录查找出来
from 商品表
except --将所有有(长=100 and 宽 =110)或(长=110 and 宽 =100) 的记录排除出去
select distinct 商品名称,长,宽
union --将所有有(长=100 and 宽 =110)的记录增加进来
from 商品表
where (长=100 and 宽 =110) or (长=110 and 宽 =100)
union
select distinct 商品名称,长,宽
from 商品表
where 长=100 and 宽 =110
呵呵,希望能有帮助,^_^
参考技术A 有多种方法,这种方法最直观:
select distinct 商品名称,case when 宽<长 then 长 else 宽 end as 长,case when 宽<长 then 宽 else 长 end as 宽 from 原表本回答被提问者采纳
参考技术B select * into #temp from 原表

update #temp
set 长=100,
宽=110
where 宽=100 and 长=110

select distinct 商品名称,长,宽 from #temp
参考技术C select 商品名称,长,宽 from table group by 商品名称,长,宽 参考技术D 楼上的就能实现你的要求:select 商品名称,长,宽 from table group by 商品名称,长,宽

将sql查询相同的列值合并到一个数组中

【中文标题】将sql查询相同的列值合并到一个数组中【英文标题】:Merge sql query same columns values into one array 【发布时间】:2014-02-07 17:24:28 【问题描述】:

我有这个简单的查询。

SELECT purchase.Quantity*purchase.Price AS Total FROM purchase.

在代码点火器中,我通过以下方式将结果作为数组获取:$this-&gt;db-&gt;query($query)-&gt;result_array();

查询结果为:

array(2)  [0]=> array(1)  ["Total"]=> string(2) "42"  [1]=> array(1)  ["Total"]=> string(5) "10900"  

我想要的是一个单一的数组 Total,它包含所有的值,比如

Total=[42,10900]

我的代码或查询中是否缺少任何内容?

【问题讨论】:

你需要所有购买的总和吗? 不。我需要将两列相乘 $output = array_map(function($v) return $v['Total']; , $result); ? 我不确定您的确切需求是什么,但如果您想要总拨款,您可以使用SUM(purchase.Quantity*purchase.Price) AS Total 【参考方案1】:

使用foreach 循环可以轻松实现您想要的。如果我理解正确的话..

$total = array();
foreach ($query->result_array() as $row) 
   $total[] = $row['Total'];

print_r($total); // outputs something like this: Array (  [0] => 42 [1] => 10900  )

【讨论】:

如果我不知道这里的属性名称怎么办? 我不明白你怎么不知道列名...? 如果它在运行时决定。 Total 可能是 TotalPurchase 只能是 Total 还是 TotalPurchase?

以上是关于有难度的sql相同列值合并行的主要内容,如果未能解决你的问题,请参考以下文章

SQL2000数据库中合并两行相同条件的值到列中怎么操作?

如何在 Ag-Grid 中将相同的相邻行与动态行跨度合并? [关闭]

如何在合并数据集之前检查行是不是存在(SQL Server)

比较列值并合并

如果具有相同的 id 和相同的值或值在 PHP 中为空,则合并行

sql把相同条件的列值合并在一起,并用“;”分隔