列内の顧客のグループに対して1つのIDを作成するにはどうすればよいですか?

サラ

サービス会社とさまざまな契約を結んでいる顧客のリストがあります。

  • 契約ごとに異なる顧客を持つことができる場合があります。例:カレンと彼女のボーイフレンドは契約を結びます。
  • 顧客のグループが異なる契約を結ぶ場合があります。例:カレンとウィルは私と複数の契約を結んでいます。

表は次のとおりです。

idCustomer  idContract          NameCust
-----------------------------------------
1           A                   Karen
1           B                   Will
2           A                   Karen
2           B                   Will
3           C                   Steph
4           C                   Peter

しかし、カレンとウィルは複数の契約を結ぶことができるので、私は彼らと他の顧客グループのために一意のIDが必要です。私が欲しい結果テーブル:

idCustomer  idContract  NameCust    Customer_GroupID
-----------------------------------------------------
1           A           Karen       1
1           B           Will        1
2           A           Karen       1
2           B           Will        1
3           C           Steph       2
4           C           Peter       2

必要な結果が得られないさまざまなことを試したため、行き詰まりました。フォーラムでDense_Rank関数を使用した人を見つけましたが、結果は次のとおりです。

SELECT
    RANK() OVER (ORDER BY idCustomers) AS Customer_GroupID,
    IdCustomers,
    IdContract
FROM 
    Table

結果は次のとおりです。

Cust_GroupID  idCustomer    idContract
--------------------------------------
1              1             A
2              1             B
1              2             A
2              2             B
3              3             C
3              4             C

複数のselectを使用しようとしましたが、存在しませんが何もありません。

KumarHarsh

私はあなたの要件を理解したようです。それでも、すべての人に完全に明確にするために、もう少しサンプルデータをスローする必要があります。既存のサンプルデータにさらにいくつかの多様なサンプルデータを追加します。

さまざまなサンプルデータでテストし、機能しない場合はお知らせください。

サンプルデータ、

create table #test(idCustomer int,idContract varchar(50) , NameCust varchar(50))
insert into #test  (idCustomer ,idContract , NameCust ) VALUES
 (1,'A','Karen')
,(1,'B','Will' )
,(2,'A','Karen')
,(2,'B','Will' )
,(3,'C','Steph')
,(4,'C','Peter')

方法1-SETBASEDアプローチ、

;with CTE as
(
select * 
,ROW_NUMBER()over(order by idCustomer)rn
from #test
)
,CTE1 as
(
select t.id,t.idContract,t.NameCust
, isnull(t1.idCustomer,t.idCustomer)customerGroupID 
from CTE t
outer apply(
select top 1 idCustomer 
from CTE t1 
where t1.id< t.id 
and((t.idCustomer=t1.idCustomer) 
or (t.idContract=t1.idContract)) 
order by t1.id 
)t1
)
,CTE2 AS(
select * 
,DENSE_RANK()OVER( order by customerGroupID )Customer_GroupID
from CTE1
)

select * from CTE2

方法2-RBAR(カーソルを使用)、

create table #test1(id int identity(1,1),idCustomer int
,idContract varchar(50) , NameCust varchar(50),customer_Groupid int)

insert into #test1  (idCustomer ,idContract 
, NameCust,customer_Groupid ) 
select idCustomer ,idContract , NameCust,null 
from #test

DECLARE @idCustomer INT
DECLARE @idContract varchar(50)
DECLARE @id INT
declare @customer_Groupid int
DECLARE @getCustomer CURSOR
SET @getCustomer = CURSOR FOR
SELECT id, idCustomer,idContract
FROM #test1
OPEN @getCustomer
FETCH NEXT
FROM @getCustomer INTO @id, @idCustomer,@idContract
WHILE @@FETCH_STATUS = 0
BEGIN

select top 1 @customer_Groupid=customer_Groupid 
from #test1 where id<@id order by id desc

if  not exists(select 1 from #test1 where id<@id 
and (idCustomer=@idCustomer or idContract=@idContract))
BEGIN

select top 1 @customer_Groupid=customer_Groupid 
from #test1 where id<@id order by id desc
if(@customer_Groupid is not null)
set @customer_Groupid=@customer_Groupid+1

end


if(@customer_Groupid is null)
set @customer_Groupid=1

update #test1 set customer_Groupid=@customer_Groupid where id=@id

FETCH NEXT
FROM @getCustomer INTO @id, @idCustomer,@idContract
END
CLOSE @getCustomer
DEALLOCATE @getCustomer


select * from #test1

drop table #test1
drop table #test

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

一般グループの顧客の場合、顧客メニューからリンクを削除するにはどうすればよいですか?

分類Dev

Stripeを使用して1回のアクションで顧客とカードの両方を作成するにはどうすればよいですか?

分類Dev

リスト内の1つのアイテムに対して繰り返す2つの列を作成するにはどうすればよいですか?

分類Dev

文字列を3つのグループに分割し、グループに対応して印刷するにはどうすればよいですか?

分類Dev

forループの「無効な構文」、forループを使用して顧客番号を取得するにはどうすればよいですか?

分類Dev

顧客名の代わりに顧客の URL を表示するにはどうすればよいですか

分類Dev

1日(昼間/夜間)に2つのグループを作成してグループの平均を取得するにはどうすればよいですか?

分類Dev

1つのアコーディオンに対して複数のトグルを作成するにはどうすればよいですか?

分類Dev

グループに関して列のペアを作成するにはどうすればよいですか?

分類Dev

複数の整数に対して1つのforループを作成するにはどうすればよいですか?

分類Dev

PHPのcurlを使用してAPIサービスの顧客を作成するにはどうすればよいですか?

分類Dev

opencart顧客リストに列「顧客ID」を追加するにはどうすればよいですか?

分類Dev

2つの変数に依存する関数の1つの変数に対して「for」ループを使用するにはどうすればよいですか?

分類Dev

一連の製品売上を月ごと、次に顧客ごとにグループ化するにはどうすればよいですか?

分類Dev

Google Chartsが1つのグラフに対して2つのSVGを作成するのを停止するにはどうすればよいですか?

分類Dev

python3で1つのforループを使用してリスト内の文字列から数字を削除するにはどうすればよいですか?

分類Dev

Excel | 数式のグループに対して数式を1ずつインクリメントするにはどうすればよいですか?

分類Dev

1対1(3つのテーブル)に基づいて1対多の関係を作成するにはどうすればよいですか?

分類Dev

顧客の2番目に最近の注文を見つけるにはどうすればよいですか

分類Dev

ある期間内の顧客の状態を記録するテーブルを設計するにはどうすればよいですか?

分類Dev

データフレーム内の各グループに対してforループを実行するにはどうすればよいですか?

分類Dev

2つのファイルグループに対してMakefileで異なるルールを使用するにはどうすればよいですか?

分類Dev

ROLLUPを使用してmysqlの1つの列のみのスーパーアグリゲートを作成するにはどうすればよいですか?

分類Dev

1つの列を除くすべてのグループでグループ化するにはどうすればよいですか?

分類Dev

1つの列を除くすべてのグループでグループ化するにはどうすればよいですか?

分類Dev

1つの列を除くすべてのグループでグループ化するにはどうすればよいですか?

分類Dev

配列内の文字列を1つの文字列に結合して、コンソールに表示するにはどうすればよいですか?

分類Dev

配列内の文字列を1つの文字列に結合して、コンソールに表示するにはどうすればよいですか?

分類Dev

特定のユーザーに対して無限のログインループを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    一般グループの顧客の場合、顧客メニューからリンクを削除するにはどうすればよいですか?

  2. 2

    Stripeを使用して1回のアクションで顧客とカードの両方を作成するにはどうすればよいですか?

  3. 3

    リスト内の1つのアイテムに対して繰り返す2つの列を作成するにはどうすればよいですか?

  4. 4

    文字列を3つのグループに分割し、グループに対応して印刷するにはどうすればよいですか?

  5. 5

    forループの「無効な構文」、forループを使用して顧客番号を取得するにはどうすればよいですか?

  6. 6

    顧客名の代わりに顧客の URL を表示するにはどうすればよいですか

  7. 7

    1日(昼間/夜間)に2つのグループを作成してグループの平均を取得するにはどうすればよいですか?

  8. 8

    1つのアコーディオンに対して複数のトグルを作成するにはどうすればよいですか?

  9. 9

    グループに関して列のペアを作成するにはどうすればよいですか?

  10. 10

    複数の整数に対して1つのforループを作成するにはどうすればよいですか?

  11. 11

    PHPのcurlを使用してAPIサービスの顧客を作成するにはどうすればよいですか?

  12. 12

    opencart顧客リストに列「顧客ID」を追加するにはどうすればよいですか?

  13. 13

    2つの変数に依存する関数の1つの変数に対して「for」ループを使用するにはどうすればよいですか?

  14. 14

    一連の製品売上を月ごと、次に顧客ごとにグループ化するにはどうすればよいですか?

  15. 15

    Google Chartsが1つのグラフに対して2つのSVGを作成するのを停止するにはどうすればよいですか?

  16. 16

    python3で1つのforループを使用してリスト内の文字列から数字を削除するにはどうすればよいですか?

  17. 17

    Excel | 数式のグループに対して数式を1ずつインクリメントするにはどうすればよいですか?

  18. 18

    1対1(3つのテーブル)に基づいて1対多の関係を作成するにはどうすればよいですか?

  19. 19

    顧客の2番目に最近の注文を見つけるにはどうすればよいですか

  20. 20

    ある期間内の顧客の状態を記録するテーブルを設計するにはどうすればよいですか?

  21. 21

    データフレーム内の各グループに対してforループを実行するにはどうすればよいですか?

  22. 22

    2つのファイルグループに対してMakefileで異なるルールを使用するにはどうすればよいですか?

  23. 23

    ROLLUPを使用してmysqlの1つの列のみのスーパーアグリゲートを作成するにはどうすればよいですか?

  24. 24

    1つの列を除くすべてのグループでグループ化するにはどうすればよいですか?

  25. 25

    1つの列を除くすべてのグループでグループ化するにはどうすればよいですか?

  26. 26

    1つの列を除くすべてのグループでグループ化するにはどうすればよいですか?

  27. 27

    配列内の文字列を1つの文字列に結合して、コンソールに表示するにはどうすればよいですか?

  28. 28

    配列内の文字列を1つの文字列に結合して、コンソールに表示するにはどうすればよいですか?

  29. 29

    特定のユーザーに対して無限のログインループを作成するにはどうすればよいですか?

ホットタグ

アーカイブ