如何写sql查询具有多个特定属性值的部门

clear_zero 2014-12-11 05:41:55
我有一个表有3个列,
dept_name,dept_attribute,dept_attributevalue
Dept1 A 10
Dept1 A 20
Dept1 B 20
Dept1 C 10
Dept1 C 30
Dept1 D 10

Dept2 B 10
Dept2 C 10
Dept2 D 10

Dept3 A 10
Dept3 B 20
Dept3 C 10
Dept3 D 20
Dept3 E 20

我现在要找具有(attribute=A and (value=10 or value =20)) 且(attribute=B and (value=20))的部门
结果是dept1,dept3

怎么用sql写出来呢?

谢谢
...全文
590 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw6328 2015-08-04
  • 打赏
  • 举报
回复
SELECT DISTINCT dept_name FROM table1 a
WHERE EXISTS(SELECT 1 FROM table1 b WHERE dept_name=a.dept_name AND dept_attribute='A' AND dept_attributevalue IN (10,20) )
AND EXISTS (SELECT 1 FROM table1 b WHERE dept_name=a.dept_name AND dept_attribute='B' AND dept_attributevalue IN (20) )
看题错了。楼主说的其实也不清楚。且,也不对,应该说是同时存在,如果且就一个数据也出不来。
gw6328 2015-08-04
  • 打赏
  • 举报
回复
引用 13 楼 Tiger_Zhao 的回复:
[Quote=引用 12 楼 jinfengyiye 的回复:]
SELECT DISTINCT dept_name FROM table1 WHERE dept_attribute='A' AND dept_attributevalue IN (10,20) OR dept_attribute='B' AND dept_attributevalue =20
[/Quote] 这两组测试数据你就过不了
    SELECT 'Dept4','A',20 UNION ALL
    SELECT 'Dept5','B',20
过了啊。怎么过不到?出来 1,3,4,5啊。
Tiger_Zhao 2015-08-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jinfengyiye 的回复:]
SELECT DISTINCT dept_name FROM table1 WHERE dept_attribute='A' AND dept_attributevalue IN (10,20) OR dept_attribute='B' AND dept_attributevalue =20
[/Quote]
这两组测试数据你就过不了
    SELECT 'Dept4','A',20 UNION ALL
SELECT 'Dept5','B',20
gw6328 2015-08-04
  • 打赏
  • 举报
回复

WITH table1(dept_name,dept_attribute,dept_attributevalue) AS (
    SELECT 'Dept1','A',10 UNION ALL
    SELECT 'Dept1','A',20 UNION ALL
    SELECT 'Dept1','B',20 UNION ALL
    SELECT 'Dept1','C',10 UNION ALL
    SELECT 'Dept1','C',30 UNION ALL
    SELECT 'Dept1','D',10 UNION ALL
    SELECT 'Dept2','B',10 UNION ALL
    SELECT 'Dept2','C',10 UNION ALL
    SELECT 'Dept2','D',10 UNION ALL
    SELECT 'Dept3','A',10 UNION ALL
    SELECT 'Dept3','B',20 UNION ALL
    SELECT 'Dept3','C',10 UNION ALL
    SELECT 'Dept3','D',20 UNION ALL
    SELECT 'Dept3','E',20
)

SELECT DISTINCT dept_name FROM table1 WHERE dept_attribute='A' AND dept_attributevalue IN (10,20) OR dept_attribute='B' AND dept_attributevalue =20
Tiger_Zhao 2015-08-04
  • 打赏
  • 举报
回复
/* 测试数据
WITH table1(dept_name,dept_attribute,dept_attributevalue) AS (
SELECT 'Dept1','A',10 UNION ALL
SELECT 'Dept1','A',20 UNION ALL
SELECT 'Dept1','B',20 UNION ALL
SELECT 'Dept1','C',10 UNION ALL
SELECT 'Dept1','C',30 UNION ALL
SELECT 'Dept1','D',10 UNION ALL
SELECT 'Dept2','B',10 UNION ALL
SELECT 'Dept2','C',10 UNION ALL
SELECT 'Dept2','D',10 UNION ALL
SELECT 'Dept3','A',10 UNION ALL
SELECT 'Dept3','B',20 UNION ALL
SELECT 'Dept3','C',10 UNION ALL
SELECT 'Dept3','D',20 UNION ALL
SELECT 'Dept3','E',20
)*/
SELECT dept_name
FROM table1
WHERE (dept_attribute='A' AND dept_attributevalue IN (10,20))
OR (dept_attribute='B' AND dept_attributevalue = 20)
GROUP BY dept_name
HAVING COUNT(DISTINCT(dept_attribute)) = 2

dept_name
---------
Dept1
Dept3
物润声无 2015-08-03
  • 打赏
  • 举报
回复
楼主,8楼有误,9楼改了一下
物润声无 2015-08-03
  • 打赏
  • 举报
回复


select * from tablename t1 where exists (
(select 1 from t1 where dept_attribute=‘A’ and  dept_attributevalue in ('10','20')
and exists
( 
select 1 from t1 where dept_attribute=‘B’ and  dept_attributevalue =20
)
--试一试

物润声无 2015-08-03
  • 打赏
  • 举报
回复


select * from table t1 where exist (
(select 1 from t1 where dept_attribute=‘A’ and  dept_attributevalue in ('10','20')
and exist
( 
select 1 from t1 where exists dept_attribute=‘B’ and  dept_attributevalue =20
)
--试一试
c02645 2014-12-17
  • 打赏
  • 举报
回复

select a.dept_name from TB  a inner join TB b on a.dept_name=b.dept_name where 
(a.dept_attribute='A' and (a.dept_attributevalue=10 or a.dept_attributevalue=20))
    and (b.dept_attribute='B' and (b.dept_attributevalue=20)) group by a.dept_name

纯手打(语法未检查),应该这样是可以的,因为你两个条件组合,所以应该同个表关联,这样才查得出两个重复条件集
baidu_24196461 2014-12-14
  • 打赏
  • 举报
回复
select * from ( select dept_name from table_name where dept_attribute=‘A’ and dept_attributevalue in ('10','20') intersect select dept_name from table_name where dept_attribute=‘b’ and dept_attributevalue=‘20’ )c 不知道对不对
还在加载中灬 2014-12-11
  • 打赏
  • 举报
回复
SELECT dept_name FROM TB

WHERE (dept_attribute='A' and (dept_attributevalue=10 or dept_attributevalue=20))
	OR(dept_attribute='B' and (dept_attributevalue=20))

GROUP BY dept_name

HAVING COUNT(DISTINCT dept_attribute)=2
直接这样即可
clear_zero 2014-12-11
  • 打赏
  • 举报
回复
引用 1 楼 reenjie 的回复:
select * from 表名 where (dept_attribute='A' and dept_attributevalue in(10,20)) or (dept_attribute='B' and dept_attributevalue=20)
这个不对啊,如果我给的例子里面有这个 Dept2 B 20 dept2也会被选中的
Neo_whl 2014-12-11
  • 打赏
  • 举报
回复


select dept_name from table_name where dpet_attribute in ('A','B')  and dept_attributevalue in (10,20)
group by dept_name
reenjie 2014-12-11
  • 打赏
  • 举报
回复

select dept_name from 表名 where (dept_attribute='A' and dept_attributevalue in(10,20)) or (dept_attribute='B' and dept_attributevalue=20)
reenjie 2014-12-11
  • 打赏
  • 举报
回复
select * from 表名 where (dept_attribute='A' and dept_attributevalue in(10,20)) or (dept_attribute='B' and dept_attributevalue=20)
内容概要:本文围绕基于粒子群算法(PSO)的风电与水电(抽水蓄能)联合优化调度问题展开研究,旨在通过智能优化算法实现可再生能源的高效利用与电力系统的经济稳定运行。文中系统阐述了粒子群算法的核心原理及其在电力调度中的适用性,构建了综合考虑风电出力不确定性、抽水蓄能电站调节能力及系统运行约束的联合优化调度模型。采用Matlab进行算法编程与仿真求解,验证了该方法在降低系统综合运行成本、提升新能源消纳水平、增强电网调峰调频能力等方面的优越性能。研究进一步设计了多种对比场景,分析不同调度策略下的系统表现,充分展示了所提模型在应对复杂运行条件时的鲁棒性与实用价。; 适合人群:具备一定电力系统分析基础和Matlab编程能力的研究生、科研人员,以及从事新能源并网调度、电力系统规划与运行等相关领域的工程师; 使用场景及目标:①应用于风电场与抽水蓄能电站的协同优化调度决策支持;②为高比例可再生能源接入的电力系统提供经济可靠的低碳调度方案;③服务于高校及科研院所中关于智能优化算法在能源系统中应用的教学与科研实验; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节与模型构建逻辑,重点关注目标函数设计、约束条件处理及参数设置对优化结果的影响,并通过复现仿真结果来掌握粒子群算法解决复杂非线性调度问题的关键技术要点。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧