[英]Return multiple values for 'Then' clause in an SQL case expression
My "files" table data is我的“文件”表数据是
fileid file1 file2
1 abc.pdf abcde.pdf
2 ghf.pdf ghfjkl.pdf
3 hjy.pdf hjyui.pdf
my "sampletable" data is我的“样本表”数据是
fileid names
1 abc
2 ghf
3 hjy
4 juk
I need output like我需要像这样的输出
fileid names files
1 abc abc.pdf
1 abc abcde.pdf
2 ghf ghf.pdf
2 ghf ghfjkl.pdf
3 hjy hjy.pdf
3 hjy hjyui.pdf
i tried the following query but not getting desired output我尝试了以下查询,但没有得到所需的输出
select st.fileid,st.contolnames,
case when st.fileid in (select fileid from Files)
then f.file1
when st.fileid in (select fileid from Files) then f.file2 end as Files
from sampletable st
join Files f on f.fileid=st.fileid
Please help with this demo: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=08337e2ee351b573bc902f06fcfba272请帮助这个演示: https : //dbfiddle.uk/?rdbms=mysql_8.0&fiddle=08337e2ee351b573bc902f06fcfba272
You can try below - use UNION
您可以尝试以下 - 使用UNION
select * from
(
select a.fileid,contolnames,file1 as files
from Files a inner join sampletable b on a.fileid=b.fileid
union
select a.fileid,contolnames,file2 as files
from Files a inner join sampletable b on a.fileid=b.fileid
)A order by fileid
OUTPUT:输出:
fileid contolnames files
1 abc abc.pdf
1 abc abcdef.pdf
2 ghf ghf.pdf
2 ghf ghfjkl.pdf
3 hjy hjyui.pdf
3 hjy hjy.pdf
To generate two rows for each record you can use CROSS JOIN
like following query to get the desired output.要为每条记录生成两行,您可以像以下查询一样使用CROSS JOIN
来获得所需的输出。
select f.fileid,
st.contolnames as names,
case
when t.x = 1 then f.file1
else file2
end as files
from Files f
inner join sampletable st
on st.fileid = f.fileid
cross join (select 1 x
union
select 2 x) t(x)
order by fileid
Try this one.试试这个。 it's working for me..它对我有用..
CREATE TABLE #Temp1(fileid INT IDENTITY, file1 varchar(50), file2 varchar(50))
CREATE TABLE #Temp2(fileid INT IDENTITY, name varchar(50))
CREATE TABLE #Temp3(fieldid int, name varchar(50), file1 varchar(50) , file2 varchar(50))
create table #Temp4 (fieldid int, name varchar(50), files varchar(50))
INSERT INTO #Temp1 VALUES( 'abc.pdf','abcde.pdf')
INSERT INTO #Temp1 VALUES( 'ghf.pdf','ghfjkl.pdf')
INSERT INTO #Temp1 VALUES( 'hjy.pdf','hjyui.pdf')
INSERT INTO #Temp2 VALUES( 'abc')
INSERT INTO #Temp2 VALUES( 'ghf')
INSERT INTO #Temp2 VALUES( 'hjy')
INSERT INTO #Temp2 VALUES( 'juk')
SELECT * FROM #Temp1
SELECT * FROM #Temp2
INSERT INTO #Temp3
SELECT * FROM (SELECT B.fileid ,name ,
CASE WHEN Name Like SUBSTRING(A.file1,1,3) THEN file1 END AS files,
CASE WHEN Name Like SUBSTRING(A.file2,1,3) THEN file2 END AS files1
FROM #Temp1 A , #Temp2 B ) AA WHERE files IS NOT NULL
INSERT INTO #Temp4 SELECT fieldid,name,file1 FROM #Temp3
INSERT INTO #Temp4 SELECT fieldid,name,file2 FROM #Temp3
SELECT * FROM #Temp4 ORDER BY name asc
DROP TABLE #Temp1
DROP TABLE #Temp2
DROP TABLE #Temp3
DROP TABLE #Temp4
Just make a join with the UNPIVOT of the first Table.只需与第一个表的 UNPIVOT 连接即可。
select f.fileid, name, files
from Files f
unpivot (files for name in (file1,file2))
join sampletable s on f.fileid = s.fileid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.