0

インポートするデータが正しいことを確認するために作成しなければならないクエリの多くを反映したダミー シナリオを作成しました。

例は、3 つのテーブルがある場合です。

  1. お客様
  2. 顧客注文

ACustomerは多くのストアに属することがOrderOnsaleできますが、購入できるのは x 顧客 x ストアの 1 つだけです。

それを正しく理解できないようです。以下は、テーブルとノディデータ+私の試みです。

IF object_id(N'Store', 'U') IS NOT NULL
   DROP TABLE Store
GO

CREATE TABLE [dbo].[Store]
(
    [Id] [bigint] NOT NULL,
    [StoreName] [varchar](50) NOT NULL,
    CONSTRAINT [PK_Store] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO

IF object_id(N'Customer', 'U') IS NOT NULL
   DROP TABLE Customer
GO

CREATE TABLE [dbo].[Customer]
(
    [CustomerId] [bigint] NOT NULL,
    [StoreId] [bigint] NOT NULL,
    [Name] [varchar](50) NOT NULL,
    [Surname] [varchar](50) NOT NULL,
    CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED ([CustomerId] ASC)
) ON [PRIMARY]
GO

IF object_id(N'CustomerOrder', 'U') IS NOT NULL
   DROP TABLE CustomerOrder
GO

CREATE TABLE [dbo].[CustomerOrder]
(
    [OrderId] [bigint] NOT NULL,
    [CustomerId] [bigint] NOT NULL,
    [OrderName] [varchar](50) NOT NULL,
    [OnSale] [bit] NOT NULL,
    CONSTRAINT [PK_CustomerOrder] PRIMARY KEY CLUSTERED([OrderId] ASC)
) ON [PRIMARY]
GO

begin tran
   INSERT INTO [dbo].[Store]([Id], [StoreName])
        SELECT 1, N'Harrods' UNION ALL
        SELECT 2, N'John Lewis'

        INSERT INTO [dbo].[Customer]([CustomerId], [StoreId], [Name], [Surname])
        SELECT 1, 1, N'John', N'Smith' UNION ALL
        SELECT 2, 2, N'Joe', N'Blogg'

        INSERT INTO [dbo].[CustomerOrder]([OrderId], [CustomerId], [OrderName], [OnSale])
        SELECT 1, 1, N'Toys', 1 UNION ALL
        SELECT 2, 1, N'Laptop', 1 UNION ALL
        SELECT 3, 2, N'Toys', 0

        commit

私の不完全な試み:

SELECT
   HasCustomerBoughtMoreThanO1ItemOnSale =
      CASE WHEN Count(T2.TotalBoughtOnSale) > 1 THEN 1 ELSE 0 END 
FROM 
   CustomerOrder co1 
INNER JOIN 
   customer c1 ON co1.CustomerId = c1.CustomerId
INNER JOIN 
   STORE S01 ON C1.StoreId = S01.Id
JOIN 
   (SELECT 
       CO2.CustomerId, S2.Id AS StoreId, 
       Count(CO2.OnSale) TotalBoughtOnSale
    FROM 
       CustomerOrder CO2
    INNER JOIN 
       customer c2 ON c2.CustomerId = CO2.CustomerId
    INNER JOIN 
       STORE S2 ON C2.StoreId = S2.Id
    WHERE 
       CO2.OnSale = 1       
    GROUP BY 
       CO2.CustomerId, S2.Id) AS t2 ON c1.CustomerId = T2.CustomerId 
                                    AND S01.Id = t2.StoreId
4

1 に答える 1

0

1 人の顧客が 1 つ以上のOnSaleアイテムを購入した場合、このクエリでうまくいきます。

SELECT
CO.CustomerId, C.StoreId
FROM CustomerOrder CO
INNER JOIN Customer C ON CO.CustomerId = C.CustomerId
WHERE OnSale = 1
GROUP BY CO.CustomerId, C.StoreId
HAVING COUNT(*) > 1

これには、表の列があるためCustomer、単一でしか買い物をすることができないことを付け加えておく必要があります。StoreStoreIdCustomer

于 2014-06-08T16:15:03.770 に答える