如果我有一张桌子,例如
1 A
1 B
1 A
1 B
2 C
2 C
我想从两列中选择不同的,这样我就可以得到
1
2
A
B
C
我该如何表达我的查询?是连接列并将它们包装在不同的函数运算符周围的唯一方法吗?
如果我有一张桌子,例如
1 A
1 B
1 A
1 B
2 C
2 C
我想从两列中选择不同的,这样我就可以得到
1
2
A
B
C
我该如何表达我的查询?是连接列并将它们包装在不同的函数运算符周围的唯一方法吗?
您可以使用 aunion
从两列中创建一个包含所有值的表:
select col1 as BothColumns
from YourTable
union
select col2
from YourTable
与 不同union all
,union
删除重复项,即使它们来自union
.
请试试:
Select Col1 from YourTable
union
Select Col2 from YourTable
UNION
删除重复记录(结果中的所有列都相同),UNION ALL
不删除。请检查UNION 和 UNION ALL 有什么区别
对于多个列,您可以选择 UNPIVOT。
SELECT distinct DistValues
FROM
(SELECT Col1, Col2, Col3
FROM YourTable) p
UNPIVOT
(DistValues FOR Dist IN
(Col1, Col2, Col3)
)AS unpvt;
试试这个——
DECLARE @temp TABLE
(
Col1 INT
, Col2 NVARCHAR(50)
)
INSERT INTO @temp (Col1, Col2)
VALUES (1, 'ab5defg'), (2, 'ae4eii')
SELECT disword = (
SELECT DISTINCT dt.ch
FROM (
SELECT ch = SUBSTRING(t.mtxt, n.number + 1, 1)
FROM [master].dbo.spt_values n
CROSS JOIN (
SELECT mtxt = (
SELECT CAST(Col1 AS VARCHAR(10)) + Col2
FROM @temp
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'
)
) t
WHERE [type] = N'p'
AND number <= LEN(mtxt) - 1
) dt
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'
)
或者试试这个 -
DECLARE @temp TABLE
(
a CHAR(1), b CHAR(1)
)
INSERT INTO @temp (a, b)
VALUES
('1', 'A'), ('1', 'B'), ('1', 'A'),
('1', 'B'), ('2', 'C'), ('2', 'C')
SELECT a
FROM @temp
UNION
SELECT b
FROM @temp
因为您要选择的内容在不同的列中,所以您可以使用 如下的联合:
select distinct tarCol from
(select distinct column1 as tarCol from table
union
select distinct column2 from table) as tarTab
您可以像这样使用来获取多个不同的列值
(SELECT DISTINCT `enodeb` as res,
"enodeb" as columnname
FROM `raw_metrics`)
UNION
(SELECT DISTINCT `interval` as res,
"interval" as columnname
FROM `raw_metrics`)