日期:2014-05-17  浏览次数:20755 次

公司OA系统中想创建一个视图来做报表,遇到问题,求大神指导
公司OA系统中想做一个统计报表,使用后台的MSSQL视图来完成。小弟不才,SQL水平非常有限,求大神指导。问题如下:
  有一张流程表单,称为表A。其中表A中有各位领导的审批意见,现在想做个视图将表中数据与各领导的审批意见放到视图里。表A中其他信息都可以直接取,但是审批意见是链接到另外一个表B中。

比如:OA流程表单中 显示的是督办人意见为:请尽快办理,同意;审批人意见为:不同意,其中XX有问题。而在后台SQL中内容为:

表A flow_id 督办人意见 审批人意见 
  23 5567 4432

表B flow_id main_id sentence
  23 5567 请尽快办理,同意
  23 4432 不同意,其中XX有问题

其中对应OA中同一张流程表单,表A中flow_id等于表B中flow_id。表A中一行记录对应表B中多行记录。

现在想做一个视图来展示表A中各个字段与审批意见中的内容。现在不晓得将A中一行数据与B中多行数据共同建立视图要怎么写,自己尝试过。但是不行,求大神指导。


------解决方案--------------------
SQL code
CREATE TABLE A (FLOW_ID INT,[督办人id]INT,[审批人] INT)
INSERT INTO a select  
  23,5567,4432
CREATE TABLE b (FLOW_ID INT,main_id INT,sentence NVARCHAR(320))
INSERT INTO B SELECT 23,5567,N'请尽快办理,同意' UNION 
SELECT 23,4432,N'不同意,其中XX有问题'

CREATE VIEW V_VIEW
AS
SELECT A.*,B.sentence FROM A JOIN B ON A.FLOW_ID=B.FLOW_ID AND ([督办人id]=MAIN_ID OR [审批人]=MAIN_ID)


/*
FLOW_ID    督办人id    审批人    sentence
23    5567    4432    请尽快办理,同意
23    5567    4432    不同意,其中XX有问题
*/

------解决方案--------------------
SQL code
-->测试数据
IF OBJECT_ID('tb1')IS NOT NULL
DROP TABLE tb1
GO
CREATE TABLE tb1 (
  flow_id INT,
  [督办人id] INT,
  [审批人]   INT)

INSERT INTO tb1
SELECT 23,
       5567,
       4432
IF OBJECT_ID('tb2')IS NOT NULL
DROP TABLE tb2
GO
CREATE TABLE tb2 (
  flow_id  INT,
  main_id  INT,
  sentence NVARCHAR(320))

INSERT INTO tb2
SELECT 23,
       5567,
       N'请尽快办理,同意'
UNION ALL
SELECT 23,
       4432,
       N'不同意,其中XX有问题'
-->测试查询
SELECT a.*,
       b.sentence
FROM   tb1 a
       LEFT JOIN tb2 b
         ON a.flow_id = b.flow_id
            AND ([督办人id] = main_id
                  OR [审批人] = main_id)
----------------------
/*
FLOW_ID 督办人id   审批人    sentence
23    5567      4432     不同意,其中XX有问题
23    5567      4432     请尽快办理,同意
*/