1

今日など、特定の日に入力されたすべてのレコードを取得したい:

マイテーブル

ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE]
    @date nvarchar = '2012-09-21'
AS
BEGIN
    declare @dateStart nvarchar(50) = @date + ' 00:00:00.0'
    declare @dateEnd nvarchar(50) = @date + ' 23:59:59.437';
    declare @returnData table (allQueue int,inQueue int,outQueue int)

    SELECT 'table1' as table_name, COUNT(*) 
    FROM   Queue as Counts

    UNION ALL

    SELECT 'table2' as table_name,COUNT(*) FROM Queue as Counts 
    WHERE   QueueDate BETWEEN @dateStart AND @dateEnd 
    AND     QueueNumIn != 0

END

編集済み: コードを編集しましたが、機能するようになりました:

ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE]
AS
BEGIN
    declare @date2 datetime
    set @date2= '2012-09-21'

    SELECT 'AllQueue' as table_name, COUNT(*) 
    FROM    Queue as sdfds

    UNION ALL

    SELECT 'InQueue' as table_name,COUNT(*) 
    FROM    Queue as sdfds 
    WHERE   QueueDate >=@date2 
    AND     QueueNumIn != 0

    UNION ALL

    SELECT 'OutQueue' as table_name, COUNT(*) FROM  Queue as sdfds 
    WHERE   QueueDate >=@date2 
    AND     QueueNumOut != 0

END

次の 3 つのレコードが返されます。 結果

1 つの問題は、2 番目の列に名前がないことです。なんで?また、2 つのフィールドを持つ 3 つの個別のレコードではなく、3 つの行を持つ 1 つのレコードのみを返したいと考えています。

4

3 に答える 3

1

特別な日にそれらだけが必要な場合、なぜすべてを返すのかわかりません。

また、日付の間で使用しない方が良いです

ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE]
@date datetime = '2012-09-21'
AS
BEGIN

select count(*) as 'AllQueue' ,
sum(case when QueueDate >=@date and QueueNumIn != 0 THEN 1 else 0 end) as 'InQueue',
sum(case when QueueDate >=@date and QueueNumOut != 0 THEN 1 else 0 end) as  'OutQueue'
from Queue
END

これはうまくいくはずです。

これはあなたに次のようなものを与えるでしょう

Allqueue              inqueue,      outqueue
----------------------------------------------------
    11      |             8        |   10
于 2012-09-21T15:20:58.240 に答える
1

varchar を datetime にキャストする必要があります。Countsそして、Count(*) にエイリアスを割り当てたいと思います

ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE] 
@date nvarchar = '2012-09-21' 
AS 
BEGIN 
declare @dateStart DATETIME = CAST(@date AS DATETIME) 
declare @dateEnd DATETIME = DATEADD(hh,24,CAST(@date AS DATETIME))
declare @returnData table (allQueue int,inQueue int,outQueue int) 
select 'table1' as table_name,COUNT(*) as Counts  from QUEUE AS tb1 
union all 
select 'table2' as table_name,COUNT(*) as Counts from QUEUE AS tb2  where QueueDate >=  @dateStart  and QueueDate  < @dateEnd and QueueNumIn !=0 
END
于 2012-09-21T15:31:23.880 に答える
0

このコードは機能し、ElVieejo から編集されたコードです

ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE]
AS
BEGIN
declare @date2 datetime
set @date2= '2012-09-21'
select COUNT(QueueID) ,
sum(case when QueueNumIn != 0 THEN 1 else 0 end) as 'InQueue',
sum(case when QueueNumOut != 0 THEN 1 else 0 end) as  'OutQueue'
from Queue where QueueDate >= @date2
END
于 2012-09-21T16:25:26.627 に答える