我有3个表格REPORTTBL1
,OFFICES
和LANGUAGES
,他们的关系如下图所示。 。现在我想创建一个表(或存储过程),其中X轴为OFFICES.OFFICE_ID
,y轴为LANGUAGES.LANGUAGE_ID
,每个单元格表示特定语言的使用次数办公室(例如,在莫斯科办公室使用中文的次数,或者在下面更好地描述)。
我只想要特定时间段的数据。我写的程序是
create procedure procedure1 (
cursor_ out sys_refcursor)as
begin
open cursor_ for
SELECT
lng.language "Language",
sum(decode( off.office_id, 1, 1, 0)) Moscow,
sum(decode( off.office_ID, 2, 1, 0)) "New York",
sum(decode( off.office_ID, 3, 1, 0)) "Tel Aviv",
sum(decode( off.office_ID, 1, 1, 0)
+ decode( off.office_ID, 2, 1, 0)
+ decode( off.office_ID, 3, 1, 0)
) Total
FROM Offices off, Languages lng, reporttbl1 rep
WHERE off.Office_ID = rep.Office_ID (+) AND rep.language_id = lng.language_id --(+) AND rep.language_id !=0 and rep.language_id is not null
AND rep.ticket_date BETWEEN '5-DEC-2015' AND '5-JAN-2015'
GROUP BY LNG.LANGUAGE
ORDER BY lng.language;
end;
但它似乎不起作用。它不会在上图中选择并显示我想要的正确数据。有人可以让我知道怎么做吗?我更喜欢Oracle SQL,但SQL Server也可以。如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
您可以使用out存储过程运行查询。但是,您的日期比较可能会导致问题,您需要应用to_date函数,如rep.ticket_date BETWEEN to_date('05-DEC-2015', 'DD-MON-YYYY') AND to_date('05-JAN-2015', 'DD-MON-YYYY')
,除非rep.ticket_date的类型为char / varchar。