需求为:

仿太平洋网站筛选。

多选类型的字段应采用‘并且’;单选和录入类型的字段应采用‘或者’

比如有如下选项:

参数头 参数体
操作系统(多选) win7 win8
运行内存(单选) 2G 4G

商品库存在有3个商品,分别为:

lenovoB111,操作系统:win7、win8,运行内存:2G

lenovoB222,操作系统:win7、win8,运行内存:4G

lenovoB333:操作系统:win10,运行内存4G

那这个时候,我吧上面的选项win7、win8、2G、4G全部勾选后,点击商品筛选按钮,生成的筛选条件应该为:

win7、win8、2G

win7、win8、4G

符合这两个筛选条件的商品将会给筛选出来,即(lenovo111&lenovo222这两台电脑)

简洁表结构为:

参数头:

id name type

参数体:

id name titleId

商品参数组成:

id product_id param_item_id

模拟参数组成记录(省略id):

(标识下以上商品对应属性id

商品:

电脑的对应id号:lenovo111:1,lenovo222:2,lenovo333:3

参数:

操作系统对应id:win7:1,win8:2,win10:3

内存对应id:2G:4,4G:5

product_id product_param_item_id
1 1
1 2
1 4
2 1
2 2
2 5
3 3
3 5

通过预想最后结果应该为1、2

查询语句(使用列转行,使结果变成以下):

product_id product_param_item_id
1 1,2,4
2 1,2,5
3 3,5

--因为t.c不可以用,所以使用子查询

select t2.product_id,t2.c from (
select t.product_id,to_char(wmsys.wm_concat(t.product_param_item_id)) c from T_EB_PRODUCT_PARAM_COMPOSE t
group by t.product_id) t2
where 1=1 and
(',' || t2.c || ',' like '%,1,%') and
(',' || t2.c || ',' like '%,2,%') and

(',' || t2.c || ',' like '%,4,%')
or
(',' || t2.c || ',' like '%,1,%') and
(',' || t2.c || ',' like '%,2,%') and

(',' || t2.c || ',' like '%,5,%');

--直接使用having过滤
select t.product_id from T_EB_PRODUCT_PARAM_COMPOSE t
group by t.product_id
having 1=1 and
(',' || t2.c || ',' like '%,1,%') and
(',' || t2.c || ',' like '%,2,%') and

(',' || t2.c || ',' like '%,4,%')
or
(',' || t2.c || ',' like '%,1,%') and
(',' || t2.c || ',' like '%,2,%') and

(',' || t2.c || ',' like '%,5,%');

【SQL】行转列过滤,使用别名和不使用别名的区别用法。的更多相关文章

  1. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  2. Ms sql行转列。汇总

    SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...

  3. sql 行专列 列转行 普通行列转换

    转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...

  4. sql 行转列 PIVOT 列转行 UNPIVOT

    原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...

  5. sql 行转列总结

    原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  6. SQL行转列 (及EAV模型获取数据)

    参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...

  7. SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...

  8. sql 行转 列, 列转行

    行列互转 复制代码 create table test(id ),quarter int,profile int) insert into test values(,,) insert into te ...

  9. SQL行转列和列转行

    行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...

  10. Sql 行转列问题总结

    行转列问题总结 1.行转列 ---1.最简单的行转列/* 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物 ...

随机推荐

  1. STL: generate ,geterate_n

    在随机生成一定范围不重复数时用到random_shuffle函数,之前填充数组都是用for循环, 想到之前python中的range生成序列,于是在C++中找到对应的generate用来生成所需数组. ...

  2. [置顶] 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

  3. [LeetCode]题解(python):132-Palindrome Partitioning II

    题目来源: https://leetcode.com/problems/palindrome-partitioning-ii/ 题意分析: 给定一个s,可以将s拆成若干个回文子字符串之和,如果拆成了m ...

  4. jar 打包后的文件执行时出现错误:RunJar jarFile [mainClass] args...

    修改别人的jar包中的配置文件,然后再打包后执行出错:RunJar jarFile [mainClass] args... 经过分析,是因为打包时需要设置mainClass,可以通过如下方法: jar ...

  5. 当x含有偶数个1,返回1,否则为0。

    题目描述: /* Return 1 when x contains an even number of 1s;0 otherwise. Assume W=32 */ int even_ones(uns ...

  6. PHP第一章学习——了解PHP(上)

    计划开启PHP学习教程,情况如下: 1.采用教程35章48个视频文件 2.时间4月29日-5月6日 共计8天 3.具体划分每天学习章节数不少于5个,预留5-6号时间为五一假期出玩情况 4.要求认真学习 ...

  7. android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改

    请修改文件 /alps/frameworks/ex/chips/src/com/android/ex/chips/RecipientAlternatesAdapter.java private sta ...

  8. for语句的嵌套(示例及练习)

    for(初始条件:循环条件:状态改变) {for(初始条件:循环条件:状态改变) {     循环体      }} 一般,用来解决循环的方法:穷举法.迭代法. 示例一:阶乘的和 示例二: 练习一:兔 ...

  9. URAL DP第一发

    列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...

  10. linux串口编程(c)

    //linux c: 串口设置//串口操作无非以下几个://1 打开                       //2 设置串口属性//3 read write //struct termios能够 ...