SQL Server - 选择一列匹配但另一列不匹配的行

ond*_*rej 4 sql-server

我需要为相同的列名选择数据类型不同的行。

这是我的数据集。预计突出显示的行会出现在结果中。

数据集

我尝试遵循 SQL 脚本,但它没有返回预期的结果

SELECT COLUMN_NAME, DATA_TYPE
FROM tablecolumns
WHERE COLUMN_NAME IN (
    SELECT COLUMN_NAME
    FROM tablecolumns
    WHERE COLUMN_NAME IN (
        SELECT COLUMN_NAME
        FROM tablecolumns
        GROUP BY DATA_TYPE, COLUMN_NAME
        HAVING count(*) = 1)
    GROUP BY COLUMN_NAME
    HAVING count(*) > 1)
ORDER BY COLUMN_NAME
Run Code Online (Sandbox Code Playgroud)

这是 SQL 小提琴的链接http://sqlfiddle.com/#!3/6e9665/1

Sha*_*ban 5

首先,您可以使用 GROUP BY 和 HAVING 获取具有多个数据类型的列名:

SELECT COLUMN_NAME
FROM tablecolumns
GROUP BY COLUMN_NAME
HAVING count(DISTINCT DATA_TYPE) > 1
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 WHERE IN(..)

SELECT COLUMN_NAME, DATA_TYPE
FROM tablecolumns
WHERE COLUMN_NAME IN (
   SELECT COLUMN_NAME
   FROM tablecolumns
   Group by COLUMN_NAME
   HAVING count(DISTINCT DATA_TYPE) > 1
)
ORDER BY COLUMN_NAME
Run Code Online (Sandbox Code Playgroud)

或者使用内部连接

SELECT a.COLUMN_NAME , a.DATA_TYPE
FROM tablecolumns a
INNER JOIN (
   SELECT b.COLUMN_NAME
   FROM tablecolumns b
   Group by b.COLUMN_NAME
   HAVING count(DISTINCT b.DATA_TYPE) > 1
) c ON c.COLUMN_NAME = a.COLUMN_NAME
ORDER BY a.COLUMN_NAME
Run Code Online (Sandbox Code Playgroud)