我的問題是在供應商的發票中我有不同名稱的相同產品。我想要達到的目標是將它們分組到一個產品代碼/類別中。你認為可能嗎?
我想總結我的 SQL Server 表中的特定記錄。我有這樣的東西
| 描述 | 數量 |
|---|---|
| 電話 X | 10 |
| AB 筆記本電腦 B | 20 |
| X 電話 | 15 |
| 筆記本電腦 C | 20 |
| AB 電話 X | 5 |
我必須將“電話”和“筆記本電腦”相加,才能獲得這樣的表格
| 描述 | 數量 |
|---|---|
| 電話 | 30 |
| 筆記本電腦 | 40 |
我不知道使用哪個查詢是正確的。問題是“筆記本電腦”和“電話”這兩個詞包含其他詞,我無法總結它們。
有人能幫助我嗎?
uj5u.com熱心網友回復:
警告詞:
正如其他人所提到的,決議字串值可能會導致資料問題。也許不是今天,而是在路上。例如,如果有人列出“帶有內置無線電話充電器的筆記本電腦”怎么辦。根據使用此查詢的方式,可能會導致重大問題。
推薦的資料分類方法:
我使用過許多外部資料饋送,如果是我,我建議您執行以下操作之一:
- 定義您自己的產品類別串列,并讓您的供應商在他們的資料饋送中映射到它們
- 要求您的供應商將他們自己的內部產品類別添加到資料饋送中,然后將他們的類別映射到您自己的
兩種方法都有利有弊,但都可以始終如一地提供準確的資料。
從描述中的關鍵字按類別分組
謹言慎行,如果您不能讓您的供應商更改他們的資料饋送,我會這樣做:
SELECT Category
,TotalQuantity = SUM(Quantity)
FROM YourTable AS A
CROSS APPLY (
SELECT Category = CASE
WHEN [Description] LIKE '%Phone%' THEN 'Phone'
WHEN [Description] LIKE '%Laptop%' THEN 'Laptop'
ELSE 'Other'
END
) AS B
GROUP BY Category
uj5u.com熱心網友回復:
Stephan 的回答是我的第一個想法 1,但是,我傾向于將此類專案保留在通用映射表中而不是代碼中……接觸點太多
想象一下@Map是一張物理桌子
例子
Declare @Map Table (Item varchar(50))
Insert Into @Map values
('Phone')
,('Laptop')
,('Cable')
,('Battery')
Select ItemGrp = coalesce(B.Item,'Undefined')
,Quantity = sum([Quantity])
from YourTable A
Left Join @Map B on [Description] like '%' Item '%'
Group By B.Item
結果
ItemGrp Quantity
Laptop 40
Phone 30
uj5u.com熱心網友回復:
當然,這可以單獨在 SQL 中完成,但是由于您已使用 vb.net 進行標記,因此您可能需要一個 .NET 解決方案。另外,既然你沒有提供代碼,我會補一些
Public Class Data
Public Property Description As String
Public Property Quantity As Integer
End Class
Dim datas = New List(Of Data)()
datas.Add(New Data With {.Description = "Phone X", .Quantity = 10})
datas.Add(New Data With {.Description = "AB Laptop B", .Quantity = 20})
datas.Add(New Data With {.Description = "X Phone", .Quantity = 15})
datas.Add(New Data With {.Description = "Laptop C", .Quantity = 20})
datas.Add(New Data With {.Description = "AB Phone X", .Quantity = 5})
Dim groupedRecords = datas.
GroupBy(Function(r) If(r.Description.ToUpper().Contains("PHONE"), "Phone", "Laptop")).
Select(Function(g) New With {.Description = g.Key, .Quantity = g.Sum(Function(i) i.Quantity)})
For Each record In groupedRecords
Debug.Print($"Description: {record.Description}, Quantity: {record.Quantity}")
Next
描述:電話,數量:30
描述:筆記本電腦,數量:40
如果您添加更多產品,這將中斷。它將描述中帶有“電話”的任何東西識別為電話,將其他任何東西識別為筆記本電腦。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/450119.html
標籤:sql sql服务器 VB.net 通过...分组 和
