我正在嘗試創建交叉連接以獲得此結果。目標是根據同一個表中的相同值獲取列的排列。這是輸入:
| ID | 姓名 | 描述 |
|---|---|---|
| 1 | 蘋果 | 應用程式 |
| 1 | 蘋果 | 應用程式 |
| 2 | 蘋果 | 應用程式 |
| 2 | 蘋果 | 啤酒 |
| 2 | 蘋果 | 應用程式 |
| 3 | 橙 | 奧格 |
現在我只想要名稱的結果是相似的,然后添加它。
| ID | 姓名 | 描述 |
|---|---|---|
| 1 | 蘋果 | 應用程式 |
| 1 | 蘋果 | 應用程式 |
| 1 | 蘋果 | 應用程式 |
| 1 | 蘋果 | 啤酒 |
| 1 | 蘋果 | 應用程式 |
| 2 | 蘋果 | 應用程式 |
| 2 | 蘋果 | 應用程式 |
| 2 | 蘋果 | 應用程式 |
| 2 | 蘋果 | 啤酒 |
| 2 | 蘋果 | 應用程式 |
我需要在插入陳述句中執行此操作,如果 id 已經具有名稱和 desc,我不需要添加只是以避免重復。
我厭倦了這個 Sql :
Select distinct a.id,a.name,a.desc
From table a cross join table b
Where a.name = b.name
我得到了排列,但我想洗掉我不需要的排列。我也想在插入選擇中做到這一點,我正在做一個明顯的不確定我該怎么做。
uj5u.com熱心網友回復:
從樣本資料和預期結果來看,這似乎是您所追求的。我使用幾個派生表來獲取& 、和&的DISTINCT組合,以及:IdNameNameDescJOINName
SELECT *
INTO dbo.YourTable
FROM (VALUES(1,'apple','App'),
(1,'apple','Aps'),
(2,'apple','Apl'),
(2,'apple','Ale'),
(2,'apple','Apls'),
(3,'orange','orng'))V(Id,Name,[desc]); --DESC is a reserved keyword, and should not be used for names
GO
SELECT NI.Id,
ND.Name,
ND.[desc]
FROM (SELECT DISTINCT
Name,
[Desc]
FROM dbo.YourTable) ND
JOIN (SELECT DISTINCT
Id,
Name
FROM dbo.YourTable) NI ON ND.Name = NI.Name
WHERE NI.Name = 'apple';
GO
DROP TABLE dbo.YourTable;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/527555.html
