【发布时间】:2021-11-30 08:37:37
【问题描述】:
我正在尝试编写一个 SQL 查询,该查询具有从另一个 SQL 查询生成的列列表。我正在开发 Microsoft SQL Server Management Studio。
这是获取列列表的 SQL 查询
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name'
它返回以下内容
| | COLUMN_NAME |
| -------- | -------------- |
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
这是我目前拥有的 SQL 查询,它运行良好
SELECT DISTINCT name1, name2
FROM [table_catalog].[table_schema].[table_name]
这是它返回的内容
| | name1 |name2 |
| -------- | -------------- |-------------- |
| 1 | value1 |a1 |
| 2 | value2 |a2 |
| 3 | value3 |a3 |
| 3 | value4 |a1 |
我想做的是得到一个表,其中只包含第一个表中的所有列,像这样
| | name1 |name2 |name3 |
| -------- | -------------- |-------------- |-------------- |
| 1 | value1 |a1 |b1 |
| 2 | value2 |a2 |b2 |
| 3 | value3 |a3 |b1 |
| 3 | value4 |a1 |b2 |
这是我目前的尝试
SELECT DISTINCT
(SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name')
FROM
[table_catalog].[table_schema].[table_name]
它没有按预期工作,我也尝试使用 CLE 和其他一些方法来做到这一点。但是,它们都不起作用。我在网上做了一些研究,好像没有多少人做过这种查询,不知道有没有其他的方法呢?我做错了什么?
【问题讨论】:
-
虽然你的问题不是很清楚,但是好像你在找动态sql
-
我想我可能需要编写一个 for 循环来生成列列表?
-
最后一列
name3的逻辑是什么?您如何将name1、name2与这些值相关联? -
“我认为我可能需要编写一个 for 循环” 不太可能。 SQL 是一种基于集合的语言,如果您正在编写循环,那么您可能做错了。
-
嗨松鼠。这是一个错字。我已经修复了它们。这些是每列的随机值。
标签: sql sql-server tsql