Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 编写一个子选择查询_Sql_Sql Server 2008 - Fatal编程技术网

Sql 编写一个子选择查询

Sql 编写一个子选择查询,sql,sql-server-2008,Sql,Sql Server 2008,我有两张一对多关系的桌子。我想写一个查询,从一条记录的表中输出所有记录,从多条记录的表中只输出一条记录 因此,具有多条记录的表中,第一条记录显示的是出现次数最多的记录。如果出现的次数相等,则它将按升序排序并显示第一条记录 表1 Col1 Col2 Col3 a1 1 4 a2 2 5 a3 3 6 表2 Col1 Col4 a1 10 a1 11 a1 22 a1 11 a2 10 a2 11 a3 1

我有两张一对多关系的桌子。我想写一个查询,从一条记录的表中输出所有记录,从多条记录的表中只输出一条记录

因此,具有多条记录的表中,第一条记录显示的是出现次数最多的记录。如果出现的次数相等,则它将按升序排序并显示第一条记录

表1

Col1 Col2 Col3
a1     1   4
a2     2   5
a3     3   6
表2

Col1 Col4
a1     10
a1     11
a1     22
a1     11
a2     10
a2     11
a3     19
a3     22
a3     22
a3     23
查询输出:

Col1 Col2 Col3 Col4
a1     1   4    11
a2     2   5    10
a3     3   6    22

希望我能说清楚。

首先需要使用group by和min()从表2中获得最小的数字,然后加入表1以获得所需的列。我使用了左连接,因为我假设表2中可能没有匹配项,但如果表2中始终有1个或多个对应记录,则可以将其更改为
内部连接

SELECT  a.col1, a.col2, a.col3, b.col4
FROM    table1 a
        LEFT JOIN (
                    SELECT  col1, col4 = MIN(col4)
                    FROM    table2
                    GROUP BY col1
                    ) b
            ON a.col1 = b.col1

首先需要使用group by和min()从表2中获得最小的数字,然后加入表1以获得所需的列。我使用了左连接,因为我假设表2中可能没有匹配项,但如果表2中始终有1个或多个对应记录,则可以将其更改为
内部连接

SELECT  a.col1, a.col2, a.col3, b.col4
FROM    table1 a
        LEFT JOIN (
                    SELECT  col1, col4 = MIN(col4)
                    FROM    table2
                    GROUP BY col1
                    ) b
            ON a.col1 = b.col1