sql-server - 如何获得第 1 列 = 1 和第 1 列 = 2 的结果?
问题描述
如何获得第 1 列 = 1 和第 1 列 = 2 的结果?假设我有三个表,需要以下输出:
员工表
eid name
1 john
2 jack
3 matt
服务表
sid service
1 shipping
2 delivering
3 storing
4 accounting
Employee_Service 表
esid eid sid
1 1 1
2 1 2
3 1 3
4 2 1
5 2 4
6 3 1
7 3 3
8 3 4
当我在 where 子句中写“and”而不是“or”时,此代码不起作用
SELECT e.[eID],
e.name,
s.sid
FROM [dbo].[Employee] e
LEFT JOIN dbo.employee_service es ON e.eid = es.eid
LEFT JOIN dbo.service s ON es.sid = s.sid
WHERE s.service = 'shipping'
AND s.service = 'storing';
结果应该是这样的
eid name sid
1 john 1
1 join 3
3 matt 1
3 matt 3
展望未来,我希望得到这样的结果:
eid name sid sid
1 john 1 3
3 matt 1 3
谢谢!
解决方案
我将使用此查询来获得所需的结果。
SELECT DISTINCT
e.eid
,e.name
,s_sid
FROM dbo.employee e
INNER JOIN
(
SELECT es.eid, s.sid,
s_sid = STUFF(
(
SELECT ' ' + CONVERT(char(1), s.sid)
FROM dbo.employee_service e_s
INNER JOIN dbo.service s ON e_s.sid = s.sid
WHERE es.eid = e_s.eid
AND s.sid IN(1, 3) -- change sid to change the service
FOR XML PATH(''))
, 1, 1, '')
FROM dbo.employee_service es
INNER JOIN dbo.service s ON es.sid = s.sid
) t ON e.eid = t.eid
WHERE s_sid = '1 3' -- change this according to the sid you chose previously
不是每个服务都有不同的列,而是将“sid”塞入一行并用空格分隔(感谢 STUFF 功能)。然后如果你改变我注释的子句的参数,你可以根据 sid 号得到你想要的任何结果。希望这有帮助!
推荐阅读
- javascript - 如何在 Bootstrap Modal 上添加加载微调器动画
- python - How do I know is there a value in another column?
- python - How to read from socket using asyncio add_reader
- angularjs - Compare date to current month year
- angular - 如何在Angular 6中将对象附加到json变量
- c++ - Fixed_alpha_shape_3() 会破坏或修改原始三角测量吗?
- javascript - 如何在 Javascript 中为数组创建键?
- python - 如果相同的元素在 Python 数据类型(字符串/列表/元组)中引用相同的对象,那么如何确定变量的大小?
- javascript - 使用 createjs 系列的 preload.js 调用函数后音频不播放
- image - 设置新 src 时 Nativescript 调整图像大小?