2

SQL顧客、トランザクション、ストアで構成されるテーブルがあります。ストアには3つの値(X、Y、Z)があります

特定の店舗で買い物をした顧客を検索したいので、このクエリを使用しました

select distinct customer from TABLE group by store.

ただし、ここでは、2つの店舗(X、Y)(Y、Z)(Z、X)と(X、Y、Z)で買い物をした顧客の詳細が必要です。

使うとき

select distinct customer from TABLE where store='X' 

結果は0になりますoracle SQL Developer

ここから先に進むには?

4

3 に答える 3

1

以下を試してください:

   Select Customer From
    (
         Select Customer,Store from TableName group by Store,Customer
    )tbl
    Group By Customer Having COUNT(Customer)>=2 Order By Customer

編集:

Declare @MainTable table
(
  Customer varchar(222),Store varchar(2222)
)
Insert Into @MainTable
Select 'C1','X'
Union All
Select 'C1','Y'
Union All
Select 'C1','X'
Union All
Select 'C2','X'
Union All
Select 'C2','Y'
Union All
Select 'C2','Z'
Union All
Select 'C3','X'
Union All
Select 'C3','Z'
Union All
Select 'C4','X'
Union All
Select 'C4','Y'


Declare @temp table 
(
  Customer varchar(200)
)
Insert Into @temp 
Select Customer From
    (
         Select Customer,Store from @MainTable group by Store,Customer
    )tbl
Group By Customer Having COUNT(Customer)>=2 Order By Customer


Declare @Customer_Store table 
(
  Customer varchar(200),
  Stores varchar(200)
)

DECLARE @Stores varchar(10)
Declare @Customer varchar(256)
While((Select COUNT(*) From @temp)>0)
Begin
        Set @Customer=(Select Top 1 Customer From @temp)
        Select @Stores=coalesce(@Stores + ',','') + Store From 
        @MainTable Where Customer=@Customer
        Group By Store
        Order By Store

        Insert Into @Customer_Store Select @Customer,@Stores

        Delete From @temp Where Customer=@Customer
        Set @Stores=null
End


Select Cast(COUNT(Customer) as Varchar(5))+' Customers shopped at Store ('+Stores+')'          CustomerDetail From @Customer_Store
Group By Stores

出力:

2 Customers shopped at Store (X,Y)
1 Customers shopped at Store (X,Y,Z)
1 Customers shopped at Store (X,Z)
于 2013-03-06T04:50:28.297 に答える
0

MySQLでは GROUP_CONCATのようなものを使用する必要があると思います。

ここでは、Oracleでエミュレートする方法を見つけることができます

たとえば、Oracle 11g R2 の場合、LISTAGG を使用できます。

SQLFiddle デモ

SELECT customer, 
       LISTAGG(store, ',') WITHIN GROUP (ORDER BY store) 
       AS STORES
FROM   
(select distinct customer,store from t) t1
GROUP BY customer;
于 2013-03-06T07:23:10.950 に答える
0

テーブル名グループから顧客ごとに個別の顧客を選択し、count(stores)>2 を持つ store

申し訳ありません....あなたはこのように試すことができます

"select customer,store from table_name group by customer ,store with count(customer)>=1 order by customer asc"

これが正しいことを願っています。

于 2013-03-06T05:07:06.037 に答える