在查询中添加寄存器

时间:2018-09-24 20:12:48

标签: sql ms-access

我有3张桌子,

Table_One:

Table_One

Table_Two(即“中间表”:

Table_Two

还有Table_Three:

Table_Three

关系如下:

enter image description here

我不知道为什么Total一词没有作为下一个查询的结果显示

SELECT 

ID_Table_One, 
Select_Info,
Deb, 
Cre

FROM Table_Two

UNION

SELECT 

ID_Table_One, 
"Total", 
IIF(SUM(Deb) - Sum(Cre) >= 0, SUM(Deb) - Sum(Cre), "" ), 
IIF(SUM(Deb) - Sum(Cre) <= 0, SUM(Deb) - Sum(Cre), "" )

FROM Table_Two

GROUP BY ID_Table_One;

这是上面查询的结果:

Query

字段Select_Info是一个“下拉列表”字段,我的意思是,它在下一个查询中显示了已经存在的信息:

 SELECT 
   [Table_Three].[Id_Table_Three],
   [Table_Three].[Id_Table_Three_Plus_Info] 
 FROM Table_Three; 

我认为,执行此操作的正确过程是调用要在查询的最后SELECT中显示的Table_Three的ID 600,这是正确的做法吗?如果是那样,怎么办?

如果我使用相同的查询关闭Access,则会得到以下结果:

Query2

正如您所注意到的,现在显示寄存器Total,但仅显示“数字部分”,我缺少-A,-B和-C部分。我尝试过更改Id_Table_Three_Plus_Info字段(A-100)中的顺序,但它始终显示数字,而不显示字母。它们都是文本值。

我可以通过创建一个具有我需要的所有值(100-A,200-B ... 600-TOTAL)的新字段来解决此问题,我的意思是,通过查询填充{ {1}}字段。但是我想对这种罕见的查询行为提出建议。

2 个答案:

答案 0 :(得分:1)

看到您已经编辑了问题并且现在添加了更多详细信息,我认为您只需要编辑UNION查询的第二部分,就可以将“ Total”的值替换为600,如下所示:

SELECT 

ID_Table_One, 
600, 
IIF(SUM(Deb) - Sum(Cre) >= 0, SUM(Deb) - Sum(Cre), "" ), 
IIF(SUM(Deb) - Sum(Cre) <= 0, SUM(Deb) - Sum(Cre), "" )

FROM Table_Two

GROUP BY ID_Table_One;

这将根据需要显示“ 600-Total”的查找值。

答案 1 :(得分:0)

尝试使用别名:

ID_Table_One, 
"Total" As Select_Info, 
IIF(SUM(Deb) - Sum(Cre) >= 0, SUM(Deb) - Sum(Cre), "" ), 
IIF(SUM(Deb) - Sum(Cre) <= 0, SUM(Deb) - Sum(Cre), "" )