Sql-Server

計算資產條碼並按房間分組

  • March 12, 2019

我有 2 張桌子Asset RegisterLocationRoom. 我想計算每個房間的資產條碼數量。

我希望輸出是資產條碼、描述、房間號的列表,並按房間計算資產。

例如房間 R0001 有 4 個資產 (01780,01781,01782,01783)。

http://sqlfiddle.com/#!18/c2cb3/2

這確實 Query 使用 XML 字元串連接來獲得您需要的格式的結果。

如果AssetIDDescription可以是 NULL 那麼你將不得不添加額外的邏輯

SELECT  '('+reverse(stuff(reverse(( 
       SELECT A.[AssetID] +',' 
       FROM [dbo].[AssetRegister] A
       WHERE A.LocationRoomID = AR.LocationRoomID
       FOR XML PATH(''))), 1, 2,''))+')'
       , 
       '('+reverse(stuff(reverse(( 
       SELECT A.[Description] +',' 
       FROM [dbo].[AssetRegister] A
       WHERE A.LocationRoomID = AR.LocationRoomID
       FOR XML PATH(''))), 1, 2,''))+')'
     ,LR.[RoomNo]
     ,COUNT(*)
FROM [dbo].[AssetRegister] AR
INNER JOIN [dbo].[LocationRoom] LR
on AR.LocationRoomID = LR.LocationRoomID
GROUP BY LR.[RoomNo],AR.LocationRoomID;

結果 在此處輸入圖像描述

DB<>小提琴

SQLFiddle

編輯:

非常感謝您是否可以使用 AssetBarcode 01780, Dell Computer, R001, 4 獲得所有 19 行

SELECT  AR.AssetID, 
       AR.[Description],
       LR.[RoomNo],
       COUNT(*) OVER(PARTITION BY LR.RoomNo)
FROM [dbo].[AssetRegister] AR
INNER JOIN [dbo].[LocationRoom] LR
on AR.LocationRoomID = LR.LocationRoomID

結果

AssetID Description RoomNo  (No column name)
01780   DELL LAPTOP R0001   4
01781   DELL MONITOR    R0001   4
01782   DELL CPU    R0001   4
01783   DELL KEYBOARD   R0001   4
01784   HP LAPTOP   R0002   4
01785   HP MONITR   R0002   4
01786   HP CPU  R0002   4
01787   HP KEYBOARD R0002   4
01788   APPLE LAPTOP AIR    R0003   8
...*(19 rows)*

DB<>小提琴

引用自:https://dba.stackexchange.com/questions/231912