Avatar of Mauro Cazabonnet
Mauro CazabonnetFlag for United States of America

asked on 

SQl Query Consolidate Rows

Looking to take this
The six rows would need to be consolidated into 1 and user id appended and the most popular company code is referenced mail will be what ever the most popular company code was

MachineGUID						Region	Machine		USERID	DevicePurpose	CompanyCode	MailCode	Model	Status
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER1	Not Available	00603-9291277	474-086-02-01	Tier 2	IN USE
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER2	Not Available	00587-1000211	739-601-07-01	Tier 2	IN USE
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER3	Not Available	00603-9291277	474-086-02-01	Tier 2	IN USE
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER4	Not Available	00603-9291277	474-086-02-01	Tier 2	IN USE
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER5	Not Available	00603-9291277	474-086-02-01	Tier 2	IN USE
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER6	Not Available	00603-9291277	474-086-02-01	Tier 2	IN USE

Open in new window

and make it look like this

MachineGUID						Region	Machine		USERID					DevicePurpose	CompanyCode	MailCode	Model	Status
VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54	EMEA	MACHINE1	USER1,USER2,USER3,USER4,USER5,USER6	Not Available	00603-9291277	474-086-02-01	Tier 2	IN USE

Open in new window

Microsoft SQL Server

Avatar of undefined
Last Comment
Mauro Cazabonnet
ASKER CERTIFIED SOLUTION
Avatar of Brian Crowe
Brian Crowe
Flag of United States of America image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of PortletPaul
PortletPaul
Flag of Australia image

So ignoring company and users for now, does this produce the correct number of rows? (I specifically ask this because you haven't specified what happens for some columns):
SELECT
        MachineGUID
      , Region
      , Machine
        --,USERID	
      , DevicePurpose
        --,CompanyCode	
      , MailCode
      , Model
      , Status
FROM your_table
GROUP BY
         MachineGUID
       , Region
       , Machine
       , DevicePurpose
       , MailCode
       , Model
       , Status

Open in new window

by the way: I placed your data in the question into code blocks so it is easier to read. (Look for the word CODE in the comment toolbar and paste between the tags.)
Avatar of Mauro Cazabonnet

ASKER

Hi consolidation takes Company code into consideration
Avatar of Mauro Cazabonnet

ASKER

Brian thx for the push in the right direction for me awesome
I'm almost there

I made a few mods

DECLARE @LastLoggedOn TABLE 
(
	Machine VARCHAR(100),
	UserID  VARCHAR(100)
)


INSERT @LastLoggedOn
VALUES
('MACHINE3', 'USER7')

DECLARE @Machine TABLE
(
	MachineGUID			VARCHAR(500),
	Region				VARCHAR(100),
	Machine				VARCHAR(100),
	UserID				VARCHAR(500),
	DevicePurpose		VARCHAR(100),
	CompanyCode			VARCHAR(100),
	MailCode			VARCHAR(100),
	Model				VARCHAR(100),
	[Status]			VARCHAR(100)	
);

INSERT @Machine
VALUES
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER1', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER2', 'Not Available', '00587-1000211', '739-601-07-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER3', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER4', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER5', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER6', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER1', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER2', 'Not Available', '00587-1000211', '739-601-07-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER3', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER4', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 58', 'EMEA', 'MACHINE3', 'USER7', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 58', 'EMEA', 'MACHINE3', 'USER8', 'Not Available', '00603-9291288', '474-086-03-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 57', 'EMEA', 'MACHINE4', 'USER5', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER6', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE');

WITH cteMachineCompanyCode AS
(
	SELECT MachineGUID, CompanyCode, COUNT(CompanyCode) as CompanyCodeCnt, MailCode,
		COUNT(MachineGUID) AS [Count],
		ROW_NUMBER() OVER(ORDER BY COUNT(MachineGUID) DESC) AS RowNumber
	FROM @Machine
	GROUP BY MachineGUID, CompanyCode, MailCode
)

SELECT DISTINCT M.MachineGUID, M.Region, M.Machine,
	STUFF(
	(
		SELECT ',' + UserID
		FROM @Machine
		WHERE MachineGUID = M.MachineGUID 
		ORDER BY UserID
		FOR XML PATH('')
	), 1, 1, '') AS UserID,
	M.DevicePurpose,
	MC.CompanyCode, MC.CompanyCodeCnt, MC.MailCode, M.Model, M.Status
FROM @Machine AS M
INNER JOIN cteMachineCompanyCode AS MC
	ON M.MachineGUID = MC.MachineGUID

	--AND MC.CompanyCodeCnt > 1
	--AND MC.CompCnt > 1
	--AND MC.RowNumber = 1

	ORDER BY M.Machine ASC

Open in new window

Avatar of Mauro Cazabonnet

ASKER

Brian,
I need to show the machine with the top CompanyCodeCnt
If there is only 1 just show that single entry
If there is a conflict meaning 2 CompanyCodes for 1 machine check LastLoggedOn table to select user and use that company code other wise set to Not Available

Thx.........
M
Avatar of Mauro Cazabonnet

ASKER

Almost there this is what I have so far, trying to resolve the logic for the join to address the conflict between 2 users with differing company codes

DECLARE @LastLoggedOn TABLE 
(
	Machine VARCHAR(100),
	UserID  VARCHAR(100)
)


INSERT @LastLoggedOn
VALUES
('MACHINE3', 'USER7')

DECLARE @Machine TABLE
(
	MachineGUID			VARCHAR(500),
	Region				VARCHAR(100),
	Machine				VARCHAR(100),
	UserID				VARCHAR(100),
	DevicePurpose		VARCHAR(100),
	CompanyCode			VARCHAR(100),
	MailCode			VARCHAR(100),
	Model				VARCHAR(100),
	[Status]			VARCHAR(100)	
);

DECLARE @MachineOut TABLE
(
	MachineGUID			VARCHAR(500),
	Region				VARCHAR(100),
	Machine				VARCHAR(100),
	UserID				VARCHAR(500),
	DevicePurpose		VARCHAR(100),
	CompanyCode			VARCHAR(100),
	CompanyCodeCnt		INT,
	MailCode			VARCHAR(100),
	Model				VARCHAR(100),
	[Status]			VARCHAR(100)	
);

INSERT @Machine
VALUES
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER1', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER2', 'Not Available', '00587-1000211', '739-601-07-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER3', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER4', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER5', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER6', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER1', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER2', 'Not Available', '00587-1000211', '739-601-07-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER3', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER4', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 58', 'EMEA', 'MACHINE3', 'USER7', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 58', 'EMEA', 'MACHINE3', 'USER8', 'Not Available', '00603-9291288', '474-086-03-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 57', 'EMEA', 'MACHINE4', 'USER5', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER6', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE');

WITH cteMachineCompanyCode AS
(
	SELECT MachineGUID, CompanyCode, COUNT(CompanyCode) as CompanyCodeCnt, MailCode,
		COUNT(MachineGUID) AS [Count],
		ROW_NUMBER() OVER(ORDER BY COUNT(MachineGUID) DESC) AS RowNumber
	FROM @Machine
	GROUP BY MachineGUID, CompanyCode, MailCode
)
INSERT INTO @MachineOut
SELECT DISTINCT M.MachineGUID, M.Region, M.Machine,
	STUFF(
	(
		SELECT ',' + UserID
		FROM @Machine
		WHERE MachineGUID = M.MachineGUID 
		ORDER BY UserID
		FOR XML PATH('')
	), 1, 1, '') AS UserID,
	M.DevicePurpose,
	MC.CompanyCode, MC.CompanyCodeCnt, MC.MailCode, M.Model, M.Status
FROM @Machine AS M
INNER JOIN cteMachineCompanyCode AS MC
	ON M.MachineGUID = MC.MachineGUID
	ORDER BY M.Machine ASC

	Select MachineGUID, Region, Machine, UserID, DevicePurpose, CompanyCode, CompanyCodeCnt, MailCode, Model, [Status] from @MachineOut
	where CompanyCodeCnt > 1
	UNION
	Select MachineGUID, Region, Machine, UserID, DevicePurpose, CompanyCode, CompanyCodeCnt, MailCode, Model, [Status] from @MachineOut
	where CompanyCodeCnt = 1 AND UserID NOT LIKE '%,%'
	UNION
	Select mco.MachineGUID, mco.Region, mco.Machine, mco.UserID, mco.DevicePurpose, mco.CompanyCode, mco.CompanyCodeCnt, mco.MailCode, mco.Model, mco.[Status] from @MachineOut mco
	LEFT JOIN  @LastLoggedOn lg ON mco.UserID = lg.UserID	
	GROUP BY mco.MachineGUID, mco.Region, mco.Machine, mco.UserID, mco.DevicePurpose, mco.CompanyCode, mco.CompanyCodeCnt, mco.MailCode, mco.Model, mco.[Status]
	HAVING SUM(LEN(mco.UserID) - LEN(REPLACE(mco.UserID,',','')) + 1) = 2
	

Open in new window

Avatar of Mauro Cazabonnet

ASKER

Brian,
I think I got it thx

I'll add the CompanyCode to the Last Logged on to resolve 2 user conflicts

Updated code

DECLARE @LastLoggedOn TABLE 
(
	Machine VARCHAR(100),
	UserID  VARCHAR(100),
	CompanyCode VARCHAR(100)
)


INSERT @LastLoggedOn
VALUES
('MACHINE3', 'USER7', '00603-9291277')

DECLARE @Machine TABLE
(
	MachineGUID			VARCHAR(500),
	Region				VARCHAR(100),
	Machine				VARCHAR(100),
	UserID				VARCHAR(100),
	DevicePurpose		VARCHAR(100),
	CompanyCode			VARCHAR(100),
	MailCode			VARCHAR(100),
	Model				VARCHAR(100),
	[Status]			VARCHAR(100)	
);

DECLARE @MachineOut TABLE
(
	MachineGUID			VARCHAR(500),
	Region				VARCHAR(100),
	Machine				VARCHAR(100),
	UserID				VARCHAR(500),
	DevicePurpose		VARCHAR(100),
	CompanyCode			VARCHAR(100),
	CompanyCodeCnt		INT,
	MailCode			VARCHAR(100),
	Model				VARCHAR(100),
	[Status]			VARCHAR(100)	
);

INSERT @Machine
VALUES
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER1', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER2', 'Not Available', '00587-1000211', '739-601-07-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER3', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER4', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 54', 'EMEA', 'MACHINE1', 'USER5', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER6', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER1', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER2', 'Not Available', '00587-1000211', '739-601-07-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER3', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER4', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 58', 'EMEA', 'MACHINE3', 'USER7', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 58', 'EMEA', 'MACHINE3', 'USER8', 'Not Available', '00603-9291288', '474-086-03-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 57', 'EMEA', 'MACHINE4', 'USER5', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE'),
	('VMWARE-42 01 02 AF F4 45 62 4A-5A E0 95 9A 00 BA 2C 55', 'EMEA', 'MACHINE2', 'USER6', 'Not Available', '00603-9291277', '474-086-02-01', 'Tier 2', 'IN USE');

WITH cteMachineCompanyCode AS
(
	SELECT MachineGUID, CompanyCode, COUNT(CompanyCode) as CompanyCodeCnt, MailCode,
		COUNT(MachineGUID) AS [Count],
		ROW_NUMBER() OVER(ORDER BY COUNT(MachineGUID) DESC) AS RowNumber
	FROM @Machine
	GROUP BY MachineGUID, CompanyCode, MailCode
)
INSERT INTO @MachineOut
SELECT DISTINCT M.MachineGUID, M.Region, M.Machine,
	STUFF(
	(
		SELECT ',' + UserID
		FROM @Machine
		WHERE MachineGUID = M.MachineGUID 
		ORDER BY UserID
		FOR XML PATH('')
	), 1, 1, '') AS UserID,
	M.DevicePurpose,
	MC.CompanyCode, MC.CompanyCodeCnt, MC.MailCode, M.Model, M.Status
FROM @Machine AS M
INNER JOIN cteMachineCompanyCode AS MC
	ON M.MachineGUID = MC.MachineGUID
	ORDER BY M.Machine ASC

	Select MachineGUID, Region, Machine, UserID, DevicePurpose, CompanyCode, CompanyCodeCnt, MailCode, Model, [Status] from @MachineOut
	where CompanyCodeCnt > 1
	UNION
	Select MachineGUID, Region, Machine, UserID, DevicePurpose, CompanyCode, CompanyCodeCnt, MailCode, Model, [Status] from @MachineOut
	where CompanyCodeCnt = 1 AND UserID NOT LIKE '%,%'
	UNION
	Select mco.MachineGUID, mco.Region, mco.Machine, mco.UserID, mco.DevicePurpose, mco.CompanyCode, mco.CompanyCodeCnt, mco.MailCode, mco.Model, mco.[Status] from @MachineOut mco
	INNER JOIN @LastLoggedOn lg ON mco.Machine = lg.Machine AND mco.CompanyCode = lg.CompanyCode 
	--WHERE mco.Machine = lg.Machine	
	GROUP BY mco.MachineGUID, mco.Region, mco.Machine, mco.UserID, mco.DevicePurpose, mco.CompanyCode, mco.CompanyCodeCnt, mco.MailCode, mco.Model, mco.[Status]
	HAVING SUM(LEN(mco.UserID) - LEN(REPLACE(mco.UserID,',','')) + 1) = 2
	

Open in new window

Avatar of Mauro Cazabonnet

ASKER

Awesome....
Microsoft SQL Server
Microsoft SQL Server

Microsoft SQL Server is a suite of relational database management system (RDBMS) products providing multi-user database access functionality.SQL Server is available in multiple versions, typically identified by release year, and versions are subdivided into editions to distinguish between product functionality. Component services include integration (SSIS), reporting (SSRS), analysis (SSAS), data quality, master data, T-SQL and performance tuning.

171K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo