Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 显示不同表中的数据并使用摘要详细显示这些数据

Sql 显示不同表中的数据并使用摘要详细显示这些数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我是一个初学者,我只是自学,所以如果我不能用程序员的方式表达我想说的话,请原谅! 我正在尝试开发简单的业务应用程序,可以做到这一点: 登记员工或客户 可以存储员工在支付工资前可以提前收取的费用或金钱(可以多次这样做,也可以多次这样做) 零) 可以存储付款(给员工的工资)-也可以多次存储 它可以计算所有费用,计算所有付款,然后找到它们的差额,因此将支付余额的剩余部分 附件是我所期望的和我所愿意的照片 首先祝贺你取得了最大的进步。坏消息是,t-sql不是一个报告工具-如果你想获得漂亮的输出(SSR

我是一个初学者,我只是自学,所以如果我不能用程序员的方式表达我想说的话,请原谅! 我正在尝试开发简单的业务应用程序,可以做到这一点:

  • 登记员工或客户
  • 可以存储员工在支付工资前可以提前收取的费用或金钱(可以多次这样做,也可以多次这样做) 零)
  • 可以存储付款(给员工的工资)-也可以多次存储
  • 它可以计算所有费用,计算所有付款,然后找到它们的差额,因此将支付余额的剩余部分 附件是我所期望的和我所愿意的照片


    首先祝贺你取得了最大的进步。坏消息是,t-sql不是一个报告工具-如果你想获得漂亮的输出(SSR、Crystal reports、excel等),你需要到别处看看,以接近t-sql中所需的输出。你需要有点创造性,例如:-

    /*
    drop table customer
    drop table expense
    drop table TblLoad
    CREATE TABLE Customer
    (    CustomerID INT --IDENTITY (1000,1)
        ,FirstName VARCHAR(40)
        ,RegDate DATETIME --DEFAULT GETDATE()
        ,Phone VARCHAR(10)
    );
    
    INSERT INTO CUSTOMER
    (    CustomerID 
        ,FirstName 
        ,RegDate 
        ,Phone ) 
    VALUES
    (1001,'Emp1',cast('2015/10/20 00:00:00.000' as datetime), null),
    (1002,'Emp2',cast('2015/10/22 00:00:00.000' as datetime), null),
    (1003,'Emp3',cast('2015/10/25 00:00:00.000' as datetime), null)
    
    CREATE TABLE Expense
    (    ExpenseID INT --IDENTITY (1000,1)
        ,CustomerID INT NOT NULL
        ,ExpDate DATETIME DEFAULT GETDATE()
        ,Amount MONEY
        ,Comment VARCHAR (100)
    );
    truncate table expense
    insert into expense
    (    ExpenseID 
        ,CustomerID 
        ,ExpDate 
        ,Amount 
        --,Comment 
    )
    Values
    (1001,1001,cast('2015/10/21' as datetime),100),
    (1002,1001,cast('2015/11/22' as datetime),20),
    (1003,1001,cast('2015/12/25' as datetime),80),
    (1004,1002,cast('2015/11/21' as datetime),100),
    (1005,1002,cast('2015/12/25' as datetime),200),
    (1006,1003,cast('2015/11/25' as datetime),300)
    
    CREATE TABLE TblLoad
    (    LoadID INT --IDENTITY (1000,1) --PRIMARY KEY 
        ,CustomerID INT NOT NULL
        ,DepDate DATETIME DEFAULT GETDATE()
        ,Amount MONEY
        ,FromTo VARCHAR (100)
    );
    truncate table tblload
    insert into tblload
    (    loadID 
        ,CustomerID 
        ,depDate 
        ,Amount 
        --,Comment 
    )
    Values
    (1001,1001,cast('2015/10/21' as datetime),1000),
    (1002,1001,cast('2015/11/21' as datetime),200),
    (1003,1001,cast('2015/12/24' as datetime),800),
    (1004,1002,cast('2015/11/21' as datetime),2000),
    (1005,1002,cast('2015/12/25' as datetime),500),
    (1006,1003,cast('2015/11/24' as datetime),4000)
    */
    select      
                --case
                --when right(rtrim(cast(yyyymm as char(8))) ,2 ) = '13' then char(30)
                --else cast(yyyymm as char(8))
                --end
                case
                when right(rtrim(cast(yyyymm as char(8))) ,2 ) = '13' then char(30)
                else cast(customerid as char(4))
                end
                ,case
                when right(rtrim(cast(yyyymm as char(8))) ,2 ) = '13' then 'Total'
                else firstname
                end
                ,sum(amountexp) amuntexp
                ,sum(amountload) amountload
                ,sum(amountload) - sum(amountexp) finalpay
    
    from
    (
    
    select      year(e.expdate) * 100 + month(e.expdate) yyyymm,
                C.CustomerID, c.FirstName, sum(e.amount) as AmountExp , 0 as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  Expense  E ON C.CustomerID = e.CustomerID
    group   by  year(e.expdate) , month(e.expdate),
                C.CustomerID, c.FirstName
    union
    select      year(e.expdate) * 100 +  13 ,
                C.CustomerID, c.FirstName, sum(e.amount) as AmountExp , 0 as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  Expense  E ON C.CustomerID = e.CustomerID
    group   by  year(e.expdate) * 100 +  13,
                C.CustomerID, c.FirstName
    union
    select      year(l.depdate) * 100 +  month(l.depdate) yyyymm,
                C.CustomerID, c.FirstName, 0 asAmountExp , sum(l.amount) as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  tblload  l ON C.CustomerID = l.CustomerID
    group   by  year(l.depdate) , month(l.depdate),
                C.CustomerID, c.FirstName
    union
    select      year(l.depdate) * 100 +  13 yyyymm,
                C.CustomerID, c.FirstName, 0 asAmountExp , sum(l.amount) as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  tblload  l ON C.CustomerID = l.CustomerID
    group   by  year(l.depdate) * 100 +  13,
                C.CustomerID, c.FirstName
    ) s
    group   by  s.CustomerID,s.firstname,yyyymm 
    order   by  s.CustomerID,s.firstname,yyyymm 
    

    问题不清楚您需要什么查询帮助或bd型号从到什么意味着使用dr ot cr..如果您能看到我期望的附加图片,请忽略所有其他内容,只使用该图片并向我展示解决方案。谢谢我不清楚您在最终输出中是如何按客户id划分的,您的费用和付款表中的月份不同,应该相同吗?或者是否有其他匹配过程?
    /*
    drop table customer
    drop table expense
    drop table TblLoad
    CREATE TABLE Customer
    (    CustomerID INT --IDENTITY (1000,1)
        ,FirstName VARCHAR(40)
        ,RegDate DATETIME --DEFAULT GETDATE()
        ,Phone VARCHAR(10)
    );
    
    INSERT INTO CUSTOMER
    (    CustomerID 
        ,FirstName 
        ,RegDate 
        ,Phone ) 
    VALUES
    (1001,'Emp1',cast('2015/10/20 00:00:00.000' as datetime), null),
    (1002,'Emp2',cast('2015/10/22 00:00:00.000' as datetime), null),
    (1003,'Emp3',cast('2015/10/25 00:00:00.000' as datetime), null)
    
    CREATE TABLE Expense
    (    ExpenseID INT --IDENTITY (1000,1)
        ,CustomerID INT NOT NULL
        ,ExpDate DATETIME DEFAULT GETDATE()
        ,Amount MONEY
        ,Comment VARCHAR (100)
    );
    truncate table expense
    insert into expense
    (    ExpenseID 
        ,CustomerID 
        ,ExpDate 
        ,Amount 
        --,Comment 
    )
    Values
    (1001,1001,cast('2015/10/21' as datetime),100),
    (1002,1001,cast('2015/11/22' as datetime),20),
    (1003,1001,cast('2015/12/25' as datetime),80),
    (1004,1002,cast('2015/11/21' as datetime),100),
    (1005,1002,cast('2015/12/25' as datetime),200),
    (1006,1003,cast('2015/11/25' as datetime),300)
    
    CREATE TABLE TblLoad
    (    LoadID INT --IDENTITY (1000,1) --PRIMARY KEY 
        ,CustomerID INT NOT NULL
        ,DepDate DATETIME DEFAULT GETDATE()
        ,Amount MONEY
        ,FromTo VARCHAR (100)
    );
    truncate table tblload
    insert into tblload
    (    loadID 
        ,CustomerID 
        ,depDate 
        ,Amount 
        --,Comment 
    )
    Values
    (1001,1001,cast('2015/10/21' as datetime),1000),
    (1002,1001,cast('2015/11/21' as datetime),200),
    (1003,1001,cast('2015/12/24' as datetime),800),
    (1004,1002,cast('2015/11/21' as datetime),2000),
    (1005,1002,cast('2015/12/25' as datetime),500),
    (1006,1003,cast('2015/11/24' as datetime),4000)
    */
    select      
                --case
                --when right(rtrim(cast(yyyymm as char(8))) ,2 ) = '13' then char(30)
                --else cast(yyyymm as char(8))
                --end
                case
                when right(rtrim(cast(yyyymm as char(8))) ,2 ) = '13' then char(30)
                else cast(customerid as char(4))
                end
                ,case
                when right(rtrim(cast(yyyymm as char(8))) ,2 ) = '13' then 'Total'
                else firstname
                end
                ,sum(amountexp) amuntexp
                ,sum(amountload) amountload
                ,sum(amountload) - sum(amountexp) finalpay
    
    from
    (
    
    select      year(e.expdate) * 100 + month(e.expdate) yyyymm,
                C.CustomerID, c.FirstName, sum(e.amount) as AmountExp , 0 as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  Expense  E ON C.CustomerID = e.CustomerID
    group   by  year(e.expdate) , month(e.expdate),
                C.CustomerID, c.FirstName
    union
    select      year(e.expdate) * 100 +  13 ,
                C.CustomerID, c.FirstName, sum(e.amount) as AmountExp , 0 as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  Expense  E ON C.CustomerID = e.CustomerID
    group   by  year(e.expdate) * 100 +  13,
                C.CustomerID, c.FirstName
    union
    select      year(l.depdate) * 100 +  month(l.depdate) yyyymm,
                C.CustomerID, c.FirstName, 0 asAmountExp , sum(l.amount) as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  tblload  l ON C.CustomerID = l.CustomerID
    group   by  year(l.depdate) , month(l.depdate),
                C.CustomerID, c.FirstName
    union
    select      year(l.depdate) * 100 +  13 yyyymm,
                C.CustomerID, c.FirstName, 0 asAmountExp , sum(l.amount) as AmountLoad , 0 as FinalPay
    FROM        Customer c
    INNER JOIN  tblload  l ON C.CustomerID = l.CustomerID
    group   by  year(l.depdate) * 100 +  13,
                C.CustomerID, c.FirstName
    ) s
    group   by  s.CustomerID,s.firstname,yyyymm 
    order   by  s.CustomerID,s.firstname,yyyymm