1

私は SQL Server Management Studio を使用しており、必要なすべてのデータ ポイントをまとめて取得できるようにクエリを実行する集計関数を使用してビューを作成しようとしています。

次を含むテーブルを見ています: 連絡先テーブル:

連絡先ID 123
姓のオーバーフロー
ファーストネーム スタック

通話テーブル:

contactid 123 starttime 2013 年 3 月 4 日
contactid 123 starttime 2013 年 2 月 2 日
contactid 123 starttime 2013 年 1 月 3 日

contactid と name とともに最大日付 (2013 年 3 月 4 日) を取得できるように、ビューを作成しようとしています。ただし、何らかの理由でクエリが複数の開始時刻を取得しています。

これは私がビューを作成する方法です:

Create VIEW LastIntakeView
AS SELECT c.contactid, c.lastname, c.firstname, ca.starttime
FROM sfcd.dbo.Contacts c, sfcd.dbo.Calls ca
WHERE ca.starttime=(select MAX(cl.starttime)
from sfcd.dbo.Calls cl where
ContactTypeID=29 group by cl.contactid);

次のエラー メッセージが表示されます。メッセージ 512、レベル 16、状態 1、行 2 サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

最大日付を取得するためにさまざまな方法を試しました。どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

2

サブクエリは複数の行を ca.StartTime に返します。これは、演算子 =、!=、<、<=、>、>= では受け入れられません。演算子 IN などで受け入れることができます

サブクエリに参加してください return


Create VIEW LastIntakeView
AS 
SELECT c.contactid, 
       c.lastname, 
       c.firstname, 
       cl.Maxstarttime
FROM sfcd.dbo.Contacts c
left join (
        select Contactid, MAX(starttime) as MaxStartTime
        from sfcd.dbo.Calls 
        where ContactTypeID=29 
        group by contactid
        ) cl
on c.contactid = cl.contactid
于 2013-03-28T23:09:56.757 に答える
1

サブクエリでは、contactType 29 のテーブル Calls のすべての行を取得します。それはあなたが望むものではないと思います。

それはそれを行う必要があります:

Create VIEW LastIntakeView AS 
SELECT c.contactid, c.lastname, c.firstname, MAX(ca.starttime) X
FROM sfcd.dbo.Contacts c left join sfcd.dbo.Calls ca on c.contactid = ca.contactid
where ca.ContactTypeID=29
group by c.contactid, c.lastname, c.firstname
于 2013-03-28T22:42:33.817 に答える