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