我有一张桌子:
std_id std_type std_dept target
1 type-1 ALL 15
2 type-1 HRD 10
3 type-2 ALL 1
4 type-2 ACCTG 5
5 type-3 ALL 5
6 type-4 ALL 25std_dept ALL意味着每个std_type的std_target对所有部门都有效。std_dept具有特定的dept值,重写值窗体点(1)。因此,我的问题是,假设我来自HRD部门,我希望得到如下结果集:
std_id std_type std_dept target
2 type-1 HRD 10
3 type-2 ALL 1
5 type-3 ALL 5
6 type-4 ALL 25我真的很喜欢展示我的作品,但我一点也不知道,我不知道如何清楚地展示select * from std_table (for each std_type) where std_dept='HRD' if exist else get from std_dept='ALL'。
我需要指针如果不是代码
发布于 2018-04-22 19:53:44
您可以使用NOT EXISTS和关联子查询:
SELECT *
FROM tab
WHERE std_dept = 'HRD'
UNION ALL
SELECT *
FROM tab t1
WHERE std_dept = 'ALL'
AND NOT EXISTS (SELECT *
FROM tab t2
WHERE t2.std_dept = 'HRD'
AND t1.std_type = t2.std_type);发布于 2018-04-22 20:13:25
听起来你想称它的重量,所以如果你来自人力资源开发,那么你想要人力资源开发或者全部,如果你想要ACCTG,那么你想要ACCTG或者所有,类型1-4。
您可以按std_type进行分组,以使它们区别开来,并按此进行排序以使顺序正确。对于加权项,您可以创建一个列,它是与WHERE子句中使用的相同值进行比较的结果,例如:
SELECT std_id, DISTINCT(std_type) AS std_type,
std_dept, target,
IF (std_dept = 'HRD', 50, 10) AS weight
FROM mytable
WHERE std_dept IN ('ALL', 'HRD')
GROUP BY std_id, std_dept, target, weight
ORDER BY std_typehttps://stackoverflow.com/questions/49970094
复制相似问题