Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 将3个查询合并为一个查询_Sql_Vba_Ms Access_Transform - Fatal编程技术网

Sql 将3个查询合并为一个查询

Sql 将3个查询合并为一个查询,sql,vba,ms-access,transform,Sql,Vba,Ms Access,Transform,我有3个问题: 第一个计算每个Qtr的总数,并 其他两个计算每个Qtr的总计,其中接收字段为[是]或[否] 现在我有(例子): 可以进行一次查询吗 qtrTotals Year / Total / TotalYes / TotalNo / TotalQtr1 / TotalYesQtr1 / TotalNoQtr1 / etc... MySQL: 全部: 是的: 否: 多谢各位 附言 tblExpences(正确的费用)具有[日期]/[价格]/[收据否] 万亿便士 10/3/2017

我有3个问题:

  • 第一个计算每个Qtr的总数,并
  • 其他两个计算每个Qtr的总计,其中接收字段为[是]或[否]
现在我有(例子):

可以进行一次查询吗

qtrTotals
Year / Total / TotalYes / TotalNo / TotalQtr1 / TotalYesQtr1 / TotalNoQtr1 / etc...
MySQL:

全部:

是的:

否:

多谢各位

附言

tblExpences(正确的费用)具有[日期]/[价格]/[收据否]

万亿便士

 10/3/2017  /  200  /  Yes
 10/3/2017  /  200  /  No
 11/3/2017  /  100  /  Yes
 14/3/2017  /  100  /  No
 15/4/2017  /  200  /  Yes
 10/5/2017  /  200  /  No

TLDR;这是一个一般形式,你可以使它工作

Select *
From (Query1) as Q1
Join (Query2) as Q2 On 1
Join (Query3) as Q3 On 1;

它应该可以工作,因为这3个查询使用的是聚合函数,因此只返回一行。因此,始终连接这些列将导致每列连接并形成一行多列。

我认为您的查询和您所给出的输出彼此不一致。看来你必须做点什么把你的月份变成季度

无论如何,与您的第二个和第三个查询类似:

TRANSFORM IIf(Sum([Price]) Is Null,0,Sum([Price])) AS SumPrice
SELECT Year([ExpensesDate]) AS [Year]
FROM tblExpenses, Numbers
WHERE (((Numbers.Number) Between 1 And 4))
GROUP BY Year([ExpensesDate])
PIVOT IIf([Number]=1,"TotalMonth"& [ReceiptYesNo] & Month([ExpensesDate]),IIf([Number]=2,"TotalMonth" & Month([ExpensesDate]),IIf([Number]=3,"TotalPerYear" & [ReceiptYesNo],"TotalPerYear"))) in ("TotalPerYear","TotalPerYearYes","TotalPerYearNo","TotalMonth1","TotalMonthYes1","TotalMonthNo1","TotalMonth2","TotalMonthYes2","TotalMonthNo2","TotalMonth3","TotalMonthYes3","TotalMonthNo3","TotalMonth4","TotalMonthYes4","TotalMonthNo4","TotalMonth5","TotalMonthYes5","TotalMonthNo5","TotalMonth6","TotalMonthYes6","TotalMonthNo6","TotalMonth7","TotalMonthYes7","TotalMonthNo7","TotalMonth8","TotalMonthYes8","TotalMonthNo8","TotalMonth9","TotalMonthYes9","TotalMonthNo9","TotalMonth10","TotalMonthYes10","TotalMonthNo10","TotalMonth11","TotalMonthYes11","TotalMonthNo11","TotalMonth12","TotalMonthYes12","TotalMonthNo12");
我发现我必须将它粘贴到一个新的查询中,因为它总是记住列标题的旧排序顺序

这取决于名为
Numbers
的新表。这只需要一个名为
Number
的字段,并且应该(至少)填充四行数据来保存数字:1、2、3和4。像这样:

Table: Numbers

Number
------
1
2
3
4

NB:我更正了“费用”的拼写,这意味着您需要调整数据或我的查询,以便他们同意。

好的,另一种方法。首先,我假设您的三个查询保存为:
qryTotalTotal
qryTotalYes
qryTotalNo

SELECT qryTotalTotal.Year,
qryTotalTotal.TotalPricePerYear AS TotalPerYear,
qryTotalYes.TotalPricePerYear AS TotalPerYearYes,
qryTotalNo.TotalPricePerYear AS TotalPerYearNo,
qryTotalYes.[1]+qryTotalNo.[1] as TotalMonth1,
qryTotalYes.[1] as TotalMonthYes1,
qryTotalNo.[1] as TotalMonthNo1,
qryTotalYes.[2]+qryTotalNo.[2] as TotalMonth2,
qryTotalYes.[2] as TotalMonthYes2,
qryTotalNo.[2] as TotalMonthNo2,
qryTotalYes.[3]+qryTotalNo.[3] as TotalMonth3,
qryTotalYes.[3] as TotalMonthYes3,
qryTotalNo.[3] as TotalMonthNo3,
qryTotalYes.[4]+qryTotalNo.[4] as TotalMonth4,
qryTotalYes.[4] as TotalMonthYes4,
qryTotalNo.[4] as TotalMonthNo4,
qryTotalYes.[5]+qryTotalNo.[5] as TotalMonth5,
qryTotalYes.[5] as TotalMonthYes5,
qryTotalNo.[5] as TotalMonthNo5,
qryTotalYes.[6]+qryTotalNo.[6] as TotalMonth6,
qryTotalYes.[6] as TotalMonthYes6,
qryTotalNo.[6] as TotalMonthNo6,
qryTotalYes.[7]+qryTotalNo.[7] as TotalMonth7,
qryTotalYes.[7] as TotalMonthYes7,
qryTotalNo.[7] as TotalMonthNo7,
qryTotalYes.[8]+qryTotalNo.[8] as TotalMonth8,
qryTotalYes.[8] as TotalMonthYes8,
qryTotalNo.[8] as TotalMonthNo8,
qryTotalYes.[9]+qryTotalNo.[9] as TotalMonth9,
qryTotalYes.[9] as TotalMonthYes9,
qryTotalNo.[9] as TotalMonthNo9,
qryTotalYes.[10]+qryTotalNo.[10] as TotalMonth10,
qryTotalYes.[10] as TotalMonthYes10,
qryTotalNo.[10] as TotalMonthNo10,
qryTotalYes.[11]+qryTotalNo.[11] as TotalMonth11,
qryTotalYes.[11] as TotalMonthYes11,
qryTotalNo.[11] as TotalMonthNo11,
qryTotalYes.[12]+qryTotalNo.[12] as TotalMonth12,
qryTotalYes.[12] as TotalMonthYes12,
qryTotalNo.[12] as TotalMonthNo12
FROM (qryTotalTotal LEFT JOIN qryTotalYes ON qryTotalTotal.Year = qryTotalYes.Year)
LEFT JOIN qryTotalNo ON qryTotalTotal.Year = qryTotalNo.Year;

谢谢你的回复。我得到错误的“转换”。唯一不同的是Where条件。一定要让我知道你是如何处理这个问题的。谢谢你,史蒂夫,但我需要将这3个查询合并到一个查询中。tblExpences(正确的费用)具有[日期]/[价格]/[收据否]。我需要一个查询,在剩下的几个月里输出[Year]/[TotalPerYear]/[TotalPerYearYes]/[TotalMonth1]/[TotalMonthYes1]/[TotalMonthNo1]/…等等。你试过了吗?如果没有,您可能会感到惊讶。如果您看到我的查询,唯一不同的是第2行和第3行中的WHERE条件。所有其他sql都是相同的。是的,您将是/否/总计分开。我也这样做,但没有where子句,只是分组。
Select *
From (Query1) as Q1
Join (Query2) as Q2 On 1
Join (Query3) as Q3 On 1;
TRANSFORM IIf(Sum([Price]) Is Null,0,Sum([Price])) AS SumPrice
SELECT Year([ExpensesDate]) AS [Year]
FROM tblExpenses, Numbers
WHERE (((Numbers.Number) Between 1 And 4))
GROUP BY Year([ExpensesDate])
PIVOT IIf([Number]=1,"TotalMonth"& [ReceiptYesNo] & Month([ExpensesDate]),IIf([Number]=2,"TotalMonth" & Month([ExpensesDate]),IIf([Number]=3,"TotalPerYear" & [ReceiptYesNo],"TotalPerYear"))) in ("TotalPerYear","TotalPerYearYes","TotalPerYearNo","TotalMonth1","TotalMonthYes1","TotalMonthNo1","TotalMonth2","TotalMonthYes2","TotalMonthNo2","TotalMonth3","TotalMonthYes3","TotalMonthNo3","TotalMonth4","TotalMonthYes4","TotalMonthNo4","TotalMonth5","TotalMonthYes5","TotalMonthNo5","TotalMonth6","TotalMonthYes6","TotalMonthNo6","TotalMonth7","TotalMonthYes7","TotalMonthNo7","TotalMonth8","TotalMonthYes8","TotalMonthNo8","TotalMonth9","TotalMonthYes9","TotalMonthNo9","TotalMonth10","TotalMonthYes10","TotalMonthNo10","TotalMonth11","TotalMonthYes11","TotalMonthNo11","TotalMonth12","TotalMonthYes12","TotalMonthNo12");
Table: Numbers

Number
------
1
2
3
4
SELECT qryTotalTotal.Year,
qryTotalTotal.TotalPricePerYear AS TotalPerYear,
qryTotalYes.TotalPricePerYear AS TotalPerYearYes,
qryTotalNo.TotalPricePerYear AS TotalPerYearNo,
qryTotalYes.[1]+qryTotalNo.[1] as TotalMonth1,
qryTotalYes.[1] as TotalMonthYes1,
qryTotalNo.[1] as TotalMonthNo1,
qryTotalYes.[2]+qryTotalNo.[2] as TotalMonth2,
qryTotalYes.[2] as TotalMonthYes2,
qryTotalNo.[2] as TotalMonthNo2,
qryTotalYes.[3]+qryTotalNo.[3] as TotalMonth3,
qryTotalYes.[3] as TotalMonthYes3,
qryTotalNo.[3] as TotalMonthNo3,
qryTotalYes.[4]+qryTotalNo.[4] as TotalMonth4,
qryTotalYes.[4] as TotalMonthYes4,
qryTotalNo.[4] as TotalMonthNo4,
qryTotalYes.[5]+qryTotalNo.[5] as TotalMonth5,
qryTotalYes.[5] as TotalMonthYes5,
qryTotalNo.[5] as TotalMonthNo5,
qryTotalYes.[6]+qryTotalNo.[6] as TotalMonth6,
qryTotalYes.[6] as TotalMonthYes6,
qryTotalNo.[6] as TotalMonthNo6,
qryTotalYes.[7]+qryTotalNo.[7] as TotalMonth7,
qryTotalYes.[7] as TotalMonthYes7,
qryTotalNo.[7] as TotalMonthNo7,
qryTotalYes.[8]+qryTotalNo.[8] as TotalMonth8,
qryTotalYes.[8] as TotalMonthYes8,
qryTotalNo.[8] as TotalMonthNo8,
qryTotalYes.[9]+qryTotalNo.[9] as TotalMonth9,
qryTotalYes.[9] as TotalMonthYes9,
qryTotalNo.[9] as TotalMonthNo9,
qryTotalYes.[10]+qryTotalNo.[10] as TotalMonth10,
qryTotalYes.[10] as TotalMonthYes10,
qryTotalNo.[10] as TotalMonthNo10,
qryTotalYes.[11]+qryTotalNo.[11] as TotalMonth11,
qryTotalYes.[11] as TotalMonthYes11,
qryTotalNo.[11] as TotalMonthNo11,
qryTotalYes.[12]+qryTotalNo.[12] as TotalMonth12,
qryTotalYes.[12] as TotalMonthYes12,
qryTotalNo.[12] as TotalMonthNo12
FROM (qryTotalTotal LEFT JOIN qryTotalYes ON qryTotalTotal.Year = qryTotalYes.Year)
LEFT JOIN qryTotalNo ON qryTotalTotal.Year = qryTotalNo.Year;