首页 > 解决方案 > 使用联合查询创建报告

问题描述

我有 2 个表格SALM(Sales table)已经提交BillNo,Date,Amount,CusIdCUSMAS(Customer table)具有ID,CustomerName。我想创建一个报告(在日期之间),上面有日期,下面是那个日期的销售细节(来自 SALM),然后是下面那个日期的总销售额。

输入:从日期和到日期

我试过这个查询:

(SELECT DISTINCT SALM.INVDATE AS RES1,'' AS RES2 ,'' AS RES3 FROM SALM 
 WHERE SALM.INVDATE BETWEEN #01-Jan-2018# AND #01-Mar-2019# ORDER BY 
 SALM.INVDATE) UNION (SELECT SALM.ORDNO AS RES1, ACCMAS.ACCNAME AS RES2,'' 
AS RES3 FROM SALM INNER JOIN ACCMAS ON SALM.CUSTCODE = ACCMAS.ID WHERE 
SALM.INVDATE BETWEEN #01-Jan-2018# AND #01-Mar-2019# ORDER BY SALM.INVDATE 
UNION select SUM(SALM.AMOUNT) AS RES1, sum(SALM.TAX) AS RES2, 
sum(SALM.NTVALUE) AS RES3 FROM SALM WHERE SALM.INVDATE 
BETWEEN #01-Jan-2018# AND #01-Mar-2019# group by SALM.INVDATE ); 

但结果没有达到我需要的格式

报告格式如图

标签: c#sql

解决方案


您将无法仅在一个 SQL 表达式中执行此操作。

当您使用 T-SQL (MSSSQL) 时,您可以将此表达式用于一个给定的日期。

SELECT '' AS 'Bill No.', CONCAT('Date: ', '03.04.2018') AS 'Customer Name', '' AS 'Amount'
UNION ALL 
SELECT CONVERT(varchar, BillNo), CustomerName, CONVERT(varchar, Amount) 
FROM SALM LEFT JOIN CUSMAS ON SALM.CusId = CUSMAS.Id WHERE Date = '3.4.2018'
UNION ALL
SELECT '', 'Cash Total', 'don''t know what you want in herer'
UNION ALL 
SELECT '', 'Credit Total', 'don''t know what you want in herer'
UNION ALL
SELECT '', 'Day Total', CONVERT(varchar, SUM(Amount)) 
FROM SALM LEFT JOIN CUSMAS ON SALM.CusId = CUSMAS.Id WHERE Date = '3.4.2018'

然后你可以在 C# 中通过所有可能的循环来执行此操作,DateTimes并为每个DateTime.

当您只想调用一个 SQL 函数时,您需要创建一个FUNCTION返回表的函数。您可以在此处阅读有关此内容的更多信息。

CREATE FUNCTION GetMyReport(@from DATETIME, @to DATETIME)
RETURNS @result TABLE
(
BillNo VARCHAR,
CustomerName VARCHAR,
Amount VARCHAR
)
BEGIN
    --FILL YOUR TABLE HERE
END;

推荐阅读