如何获取两个 sql 查询并将它们组合成一个查询

安德鲁·特拉克尔

我正在为我的程序编写自定义脚本:

// You might want to use a date range and specify the first Sunday and use that variable.
// Or, you may want to have a user request variable where they key in the starting Sunday #YYYY MM DD#

// Let us work out the current week number
$iStartWeekNumber = $Today#CUSTOMDATE[%W] + 1
TEXT "Current week number (1 to 52): $iStartWeekNumber"
EOL

// Let us work out the current year
$iThisYear = $Today#CUSTOMDATE[%Y]
TEXT "Current year: $iThisYear"
EOL

// Now we can do a manual for loop from iStartWeekNumber to the end of the year
TEXT "TODO: Work out how to show the date nicely formatted"
EOL
$datWeek = $Today
LOOP AS $iWeekNumber FROM $iStartWeekNumber TO 52
    $datWeek = $datWeek + 7
    TEXT "Week: $iWeekNumber"
    EOL
    TEXT "Date: {$datWeek#SHORTDATE}"
    EOL

    // Iterate all available speakers
    LOOP FROM "Congregation Speakers" NODATERANGE WHERE "Congregation" IS "$LocalCong" AND "notavail" IS "0"  SORTBY "Speaker"

        // Requirement 1
        // 1. He is not in program for a talk in our home or another congregation for that same WEEKEND (either saturday or sunday)

        // Store the current speaker into a variable
        VARIABLE_FIELD "Speaker" "$strCurrentSpeaker"

        LOOP SQL "SELECT * FROM [Home Talks] WHERE ((DatePart('ww',[Last Given],2)=$iWeekNumber)) AND ((DatePart('yyyy',[Last Given])=$iThisYear)) AND [Speaker] = '$strCurrentSpeaker' AND [Congregation]='$LocalCong'" ROW_COUNT "$iNumHomeTalks"
        END_LOOP

        LOOP SQL "SELECT * FROM [Away Talks] WHERE ((DatePart('ww',[Talk Date],2)=$iWeekNumber)) AND ((DatePart('yyyy',[Talk Date])=$iThisYear)) AND [Brother] = '$strCurrentSpeaker'" ROW_COUNT "$iNumAwayTalks"
        END_LOOP

        IF "$iNumHomeTalks" IS "0" AND "$iNumAwayTalks" IS "0"
            // Requirement 2
            // 2. He should not give a talk more than once in a MONTH (so he is unavailable if he will be giving a talk during the month)
            $iMonth = date_part($datWeek,"M")
            LOOP SQL "SELECT * FROM [Home Talks] WHERE ((DatePart('m',[Last Given])=$iMonth)) AND ((DatePart('yyyy',[Last Given])=$iThisYear)) AND [Speaker] = '$strCurrentSpeaker' AND [Congregation]='$LocalCong'" ROW_COUNT "$iNumHomeTalksForMonth"
            END_LOOP
            LOOP SQL "SELECT * FROM [Away Talks] WHERE ((DatePart('m',[Talk Date])=$iMonth)) AND ((DatePart('yyyy',[Talk Date])=$iThisYear)) AND [Brother] = '$strCurrentSpeaker'" ROW_COUNT "$iNumAwayTalksForMonth"
            END_LOOP
            $iTotalTalksForMonth = $iNumHomeTalksForMonth + $iNumAwayTalksForMonth
            IF "$iTotalTalksForMonth" IS "0"
                // Requirement 3
                // 3. That same weekend either one or more than x speakers are not out for a talk or unavailable

                // TO DO
                TEXT "$strCurrentSpeaker"
                EOL
            END_IF
        END_IF
    END_LOOP

    BLANK *1
END_LOOP

我想特别提醒您注意两组SQL 查询

设置 1:

LOOP SQL "SELECT * FROM [Home Talks] WHERE ((DatePart('ww',[Last Given],2)=$iWeekNumber)) AND ((DatePart('yyyy',[Last Given])=$iThisYear)) AND [Speaker] = '$strCurrentSpeaker' AND [Congregation]='$LocalCong'" ROW_COUNT "$iNumHomeTalks"
END_LOOP
LOOP SQL "SELECT * FROM [Away Talks] WHERE ((DatePart('ww',[Talk Date],2)=$iWeekNumber)) AND ((DatePart('yyyy',[Talk Date])=$iThisYear)) AND [Brother] = '$strCurrentSpeaker'" ROW_COUNT "$iNumAwayTalks"
END_LOOP

并设置 2:

LOOP SQL "SELECT * FROM [Home Talks] WHERE ((DatePart('m',[Last Given])=$iMonth)) AND ((DatePart('yyyy',[Last Given])=$iThisYear)) AND [Speaker] = '$strCurrentSpeaker' AND [Congregation]='$LocalCong'" ROW_COUNT "$iNumHomeTalksForMonth"
END_LOOP
LOOP SQL "SELECT * FROM [Away Talks] WHERE ((DatePart('m',[Talk Date])=$iMonth)) AND ((DatePart('yyyy',[Talk Date])=$iThisYear)) AND [Brother] = '$strCurrentSpeaker'" ROW_COUNT "$iNumAwayTalksForMonth"
END_LOOP

以上是我自己的脚本语言。但在幕后,它采用原始 SQL 查询并使用 Jet 在 Microsoft Access 数据库上运行它。

他们工作得很好。但是我想知道这两组查询是否可以合并为一组?如您所见,我试图确定的只是找到的记录数。所以,如果我能合并的查询[Home Talks][Away Talks]我将结束只有2的查询来执行,而不是四个。

在我看来,我需要使用,UNION但每个表中的一个字段是不同的:

  • Last Given
  • Talk Date

所以我不能只UNION在两个查询之间缝合关键字

太阳骑士0

您可以UNION通过别名字段名称来使用

SELECT [Last Given] AS MyFieldName FROM [Home Talks]
UNION
SELECT [Talk Date] AS MyFieldName FROM [Away Talks]

您只需要列出单个字段而不是*并确保任何输出字段匹配类型(或转换为字符串作为查询的一部分)和名称(别名)。

编辑:如果两个字段完全不相关(而不是具有不同字段名称的相同或相似信息),则这是一个附加选项:

SELECT [Last Given], NULL AS [Talk Date] FROM [Home Talks]
UNION
SELECT NULL AS [Last Given], [Talk Date] FROM [Away Talks]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL将多个选择语句组合成一个查询

SQL/Hive 如何将两个不同的查询组合成一个具有不同列的结果

如何取出这些元素并将它们组合成一个数据框

Ramda 对两个函数应用一个参数并将它们组合成自由点

如何获取多个 Sample() 向量输出并将它们组合成一个数据框

读取一些 csv 文件并将它们组合成一个数据帧

取两个单独的数组的一部分,并将它们组合成一个

如何组合两个 sql 查询,使一个查询的输出成为另一个查询的条件

通过将它们组合成一个整数来一次处理两个短裤

如何在循环中从每一列获取值并将它们组合成一个字符串

SQL查询如何获取时差Beetwen两个结果

SQL查询,如何从两个表中获取数据

将两个SQL语句的结果组合成一个显示新结果的结果

如何将两个查询集组合成一个类似字典的对象?

如何一次读取多个激光雷达文件(.las)并将它们组合成 R 中的一个数据帧

如果我有一个项目的单独模型和与该项目有关的图像的单独模型,如何将它们组合成一个查询?

如何在SQL中联接两个表以从一个表中获取名称并在查询中显示它们?

如何从同一SQL中的两个不同表中获取两个值

“如何使用ggplot绘制多项式线和方程,然后将它们组合成一个图”

for循环可打印多个词典,如何将它们组合成一个词典

SQL如何通过一个语句中的两个where条件获取两列

读取并提取一个字符串中的多个SQL查询,并将它们存储在Java列表中

SQL:如何组合两个查询并获得相同的结果?

如何获取数据PostCode在两个空间sql server之后的最后两个

如何从SQL Server获取最近两个小时的记录

如何从SQL中的两个表获取记录

如何连接两个sql查询?

如何在 SQLite 中将多个 COUNT 组合成一个大查询?

sqlite 将来自不同表的 2 个查询组合成一个