我有一张如下表:
CId Name Class
1 vv A_N
1 ff B_P
1 bb C_U
我想对上面的结果运行一个select查询以获得所需的输出,如下所示:
CId Name Class
1 vv A
1 vv N
1 ff B
1 bb P
1 ff C
1 bb U
另外,我上面举了一个例子。在实际场景中,我有很多列,查询是如此之大,以至于我已经在使用Union all来满足其他一些要求。这就是为什么我不想再次使用它来满足这一要求。
答案 0 :(得分:0)
您可以将SELECT CId, Name, SUBSTRING_INDEX(Class, '_', 1)
FROM table
UNION
SELECT CId, Name, SUBSTRING_INDEX(Class, '_', -1)
FROM table
与SELECT
一起使用,例如:
ORDER BY
完成后,您可以将其包装到另一个SELECT a.*
FROM (
SELECT CId, Name, SUBSTRING_INDEX(Class, '_', 1)
FROM table
UNION
SELECT CId, Name, SUBSTRING_INDEX(Class, '_', -1)
FROM table
) a
ORDER BY a.Name;
并应用UNION
,例如:
class
<强>更新强>
如果您不想使用sc._jsc.hadoopConfiguration().set("fs.s3.awsAccessKeyId", KEYS[0])
sc._jsc.hadoopConfiguration().set("fs.s3.awsSecretAccessKey", KEYS[1])
,那么唯一的另一个选择是更改架构并为.option('forward_spark_s3_credentials', 'true')
创建另一个表。
答案 1 :(得分:0)
select *
from yourtable t
cross apply dbo.[DelimitedSplit8K] (t.Class, '_') c
使用DelimitedSplit8K http://www.sqlservercentral.com/articles/Tally+Table/72993/
答案 2 :(得分:0)
如果你有固定的格式,这是一个简单的解决方案:
SELECT a.Cid,
a.NAME,
t.class
FROM Product a
CROSS APPLY(
SELECT LEFT(class, 1) class FROM @Product WHERE NAME = a.name
UNION ALL
SELECT RIGHT(class, 1) class FROM @Product WHERE NAME = a.name
) t
输出:
Cid NAME class
1 vv A
1 vv N
1 ff B
1 ff P
1 bb C
1 bb U