我正在报告我公司的桌面以及当前安装在其上的软件程序。
例如,假设我们有三列保证每台机器只返回一行:Location, Last_logged-on_User, Machine_Name
和一行将返回一行或多行:Software
。我希望第一行显示所有单行列以及Software列的第一行,其余行仅显示Software行,并用空格填充单行列。
Location Last_logged-on_User Machine_Name Software_name
Venus James.Jiao McKain Internet Explorer
Firefox
Antivirus X
Office Suite
Mars Veronica.Mars Obama Internet Explorer
Google Chrome
Adobe Acrobat
Jupiter Taylor.Swift Bachmann Opera
Speech Helper
Dictionary for Kids
我正在寻找这个查询,但我不太清楚如何从这开始,因为我想不出有条件地将某些行中的单行列空白。
如果需要,这是表格结构
Create table Machine
(
machine_id int not null,
machine_name varchar(25) not null,
last_logged-on_user varchar(25) not null,
location varchar(25) not null
)
Create table SoftwareList
(
machine_id int not null,
software_name varchar(25) not null
)
答案 0 :(得分:4)
您可以使用Row_Number() Over (Partition by
来确定它是否是子查询中的第一个匹配项,然后使用case语句仅在行号为1时返回位置。
SELECT
CASE WHEN RowNo = 1 OR RowNo IS NULL THEN location ELSE '' END as Location,
Software_name
FROM (
SELECT
sl.Software_name ,
m.location,
ROW_NUMBER() OVER(Partition by location ORDER by location) as rowNo
FROM Machine m
LEFT JOIN Softwarelist sl
ON sl.Machine_id = m.machine_id
) d
请参阅SQL Fiddle here
希望有所帮助