Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回某些值的查询,这些值可能包含在一对多的相关表中,也可能不包含在该表中_Sql_Oracle - Fatal编程技术网

Sql 返回某些值的查询,这些值可能包含在一对多的相关表中,也可能不包含在该表中

Sql 返回某些值的查询,这些值可能包含在一对多的相关表中,也可能不包含在该表中,sql,oracle,Sql,Oracle,我有两个表,其中action表可能包含每个设备的多个记录。 我需要测试创建一个查询,该查询测试action表中是否只存在3个值,并使用现有Oracle数据库在单独的列中返回这些值以及主表记录 以下是表格结构: 桌上设备 目标……描述 1………设备1 2………设备2 表格动作 对象…操作…操作2设备 1…………A…………1 2………B………1 3……….A……….2 4………C………2 5……….D……….2 (Action2Device等于表_Device.Objid的链接) 有许多可能的操作可

我有两个表,其中action表可能包含每个设备的多个记录。 我需要测试创建一个查询,该查询测试action表中是否只存在3个值,并使用现有Oracle数据库在单独的列中返回这些值以及主表记录

以下是表格结构:

桌上设备
目标……描述
1………设备1
2………设备2

表格动作
对象…操作…操作2设备
1…………A…………1
2………B………1
3……….A……….2
4………C………2
5……….D……….2

(Action2Device等于表_Device.Objid的链接)

有许多可能的操作可以呈现,但我只对A、B和C感兴趣。我希望能够生成类似以下内容的报告:

描述……行动a……行动b……行动c
设备1。A……….B
设备2…A…C

我已经设法创建了一个左连接,但它会为每个操作记录重复设备。有没有建议如何编写SQL查询以生成如上所示的结果

看看这个

不需要左连接,我只是使用
CASE
语句来创建附加列

SELECT D.Name
       ,MAX(CASE WHEN A.Action = 'A' THEN 'A' ELSE NULL END) AS ActionA
       ,MAX(CASE WHEN A.Action = 'B' THEN 'B' ELSE NULL END) AS ActionB
       ,MAX(CASE WHEN A.Action = 'C' THEN 'C' ELSE NULL END) AS ActionC
FROM   TABLE_DEVICE D
INNER JOIN
       Table_Action A
ON     A.Action2Device = D.Objid
GROUP BY
       D.Name

在Oracle 11g中,您也可以这样做

with t as 
(select  a.device,b.action
 from table_device a join table_action b 
 on a.objid=b.action2device)
select * 
from t
pivot (MAX(ACTION)
       for action
       in ('A' AS ACTIONA,'B' AS ACTIONB,'C' AS ACTIONC))