2016-07-08 5 views
0

チームメンバーで、問題が原因でここに投稿したクエリを書き直しました。私の前の質問からの提供された回答からの様々な情報源を使用して、他の解決方法をチェックし、質問は意図した通りに機能する。 HOWEVERこのクエリを埋め込み、バックグラウンドで実行する必要がありますが、問題は実際にセルに結果を表示する必要があります。 PRINTクエリの機能は、実行すると実際にEXCELでウィンドウがポップアップしますが(DUH、意図どおり)、何をしたいのですか。PRINTEDの結果が表示されます。クエリはスプレッドシート内で自動的に実行されるので、SSMSからファイルにエクスポートするオプションはオプションではありません.OUR DBAは私たちが仕事として走らせることのできないDBを使っているのでかなりファンキーです。 ..再び助けていただければ幸いです。PRINTの結果をEXCELで表示

Declare @StartDate1 as DateTime 
Declare @StartDate2 as DateTime 
Declare @EndDate1 as DateTime 
Declare @EndDate2 as DateTime 
Declare @TodaysDate1 as DateTime 
Declare @TodaysDate2 as DateTime 
Declare @Yesterday as DateTime 

Declare @TotalRecords1 int = 7 
Declare @TotalRecords2 int = 7 

set @TodaysDate1 = GETDATE() 
set @TodaysDate2 = @TodaysDate1 
set @Yesterday = DATEADD(day,-1,@TodaysDate1) 

------------------------------------------------------------------- 
--    For AM Shift Data Readings      -- 
------------------------------------------------------------------- 
set @StartDate1 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(mm, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + 
    '17:00' as datetime) 
set @EndDate1 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate1)) + '-' + 
    convert(varchar(2), datepart(mm, getdate())) + '-' + 
    convert(varchar(2), datepart(dd, getdate())) + ' ' + 
    '04:59' as datetime) 

------------------------------------------------------------------- 
--    For PM Shift Data Readings      -- 
------------------------------------------------------------------- 
set @StartDate2 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(mm, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + 
    '05:00' as datetime) 
set @EndDate2 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(mm, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + 
    '16:59' as datetime) 

--------Material Scan Table-------- 

SELECT 
@TotalRecords1=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate1 and @EndDate1), 
@TotalRecords2=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate2 and @EndDate2) 

WHILE @TotalRecords1 = 0 AND @TotalRecords2 = 0 

BEGIN 
set @TodaysDate1 = DATEADD(day,-1,@TodaysDate1) 
set @TodaysDate2 = DATEADD(day,-1,@TodaysDate2) 
set @Yesterday = DATEADD(day,-1,@TodaysDate1) 

------------------------------------------------------------------- 
--    For AM Shift Data Readings      -- 
------------------------------------------------------------------- 
set @StartDate1 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(mm, @Yesterday)) + '-' + 
    convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + 
    '17:00' as datetime) 
set @EndDate1 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate1)) + '-' + 
    convert(varchar(2), datepart(mm, getdate())) + '-' + 
    convert(varchar(2), datepart(dd, getdate())) + ' ' + 
    '04:59' as datetime) 

------------------------------------------------------------------- 
--    For PM Shift Data Readings      -- 
------------------------------------------------------------------- 
set @StartDate2 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate2)) + '-' + 
    convert(varchar(2), datepart(mm, getdate())) + '-' + 
    convert(varchar(2), datepart(dd, getdate())) + ' ' + 
    '05:00' as datetime) 
set @EndDate2 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate2)) + '-' + 
    convert(varchar(2), datepart(mm, getdate())) + '-' + 
    convert(varchar(2), datepart(dd, getdate())) + ' ' + 
    '16:59' as datetime) 

SELECT 
@TotalRecords1=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate1 and @EndDate1), 
@TotalRecords2=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate2 and @EndDate2) 

IF (SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate1 and @EndDate1) > 0 
    BREAK 
ELSE 
    IF (SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate2 and @EndDate2) > 0 
    BREAK 
    ELSE 
    CONTINUE 
END 

PRINT '1st Shift LOT Trace Scans ending' 
PRINT @EndDate2 
PRINT @TotalRecords2 
PRINT ' ' 
PRINT '2nd Shift LOT Trace Scans ending' 
PRINT @EndDate1 
PRINT @TotalRecords1 

THESEたちは何とかEXCELを表示するために取得したいと思いSSMSで実行クエリからの実際の結果、次のとおりです。あなたは、テーブル変数にこれらを保存する代わりに、それらを印刷してみてください

1st Shift LOT Trace Scans ending 
Jul 6 2016 4:59PM 
64 

2nd Shift LOT Trace Scans ending 
Jul 7 2016 4:59AM 
73 

答えて

0

長い週末を過ごしてチームの助けを借りて、私たちはEXCELで結果を得ることができました。 PRINTではなくCONCATを使用するだけでした。最終的に私がここに投稿する結論に達したので、私は思った。上記の答えはまた幾分解決策ですが、私がここに投稿しているのは、クエリを介して自動的にインポートできるときにデータをエクスポートしないようにすることです。 !に相づちを打ったすべての人のおかげで怒鳴る参照:

SELECT CONCAT ('1st Shift ', @StartDate1, ' Total Scans ', @TotalRecords1, ' and ' + 
'2nd Shift ', @StartDate2, ' Total Scans ', @TotalRecords2) as LotTrace 

をし、その結果だった:

LotTrace 
1st Shift Jul 11 2016 5:00PM Total Scans 105      2nd Shift Jul 11 2016 5:00AM Total Scans 77 
+0

あなたの結果はあなたの質問の期待される結果と一致しません。 'CONCAT'はすべて一緒に文字列を追加します。結果の文字列を 'PRINT'または' SELECT'することができます。 – Ash

+0

私の元の質問は、EXCELシートから実行できるように、クエリの結果を行として取得できなかったためです。これをどのように行うのでしょうか。 EXCEL内から実行するとPRINT結果が機能しません。これらの結果を得るために、CONCATを使用して、結果を自動的に実行されるスプレッドシート内のさらなる計算に使用できるように、結果をCONCATを使用してDBのLotTraceとEXCELの行結果として表示させました。 – Edward

1

次の:

declare @msgTable table (msg varchar(100)); 
insert into @msgTable values ('1st Shift LOT Trace Scans ending'); 
insert into @msgTable values (@EndDate2); 
select * from @msgTable; 

、右の結果をクリックしてcsv FILにSave results asをクリックeまたはtab delimitedファイルのいずれかをExcelで開くことができます。

+0

おかげで、私のシフトは、私がしようとするチームのために転送されますすぐに終了します。 – Edward

+0

私は寝ることができなかったので、私があなたが提案したようにして、それはクエリでうまくいきます。 EXCELに移入する小さな問題を1つ試してみましょう。このクエリーは自動的に入力されますが、これは素晴らしい応答であり、最終結果に近づきます。あなたの返事にとても感謝します。 – Edward

+0

第1シフトLOTトレーススキャン終了 7月8日16時4:59 93' – Edward