Witam ponownie
W poprzednim poście kolega @woolfik pomógł i poszedłem dalej.
Dodałem nazwy kolumn, zaokragliłem do pełnych liczb, za pomocą BCP udało się całość wyeksportować do pliku TXT.
Do pełni szczęści brakuje mi formatu wyjściowego.
Próbowałem łączyć kolumny za pomocą "CAST" oraz "CONCAT" ale bez powodzenia
Wynik sumy z każdej kolumny (szklenie i jednostki) muszę mieć zawsze trzycyfrowy. Obecnie jak szklenie np. ma wynik 58 i jednostek jest 30 to wynik mam 58 30 – muszę uzyskac aby ten wynik zapisał się do pliku tekstowego w formacie: 058030.
Poniżej kod oraz wynik zapytania:
SELECT sum(s.glasscnt) AS szklenia, (SELECT ROUND(sum(s.product_time ),0))AS jednostki
from
(SELECT '' as prod_cell_name,
(SELECT COUNT(*) AS Expr1
FROM dbo.prod_cell_doc AS pcd
WHERE (pcd.prod_cell_id = 101) AND (pcd.product_doc_id = dbo.prod_cell_doc.product_doc_id) AND (pcd.order_number = dbo.prod_cell_doc.order_number))
AS glasscnt, product_doc.product_time
FROM dbo.prod_cell_doc_event
JOIN dbo.prod_cell_status ON dbo.prod_cell_doc_event.prod_cell_status_id = dbo.prod_cell_status.id
JOIN dbo.prod_cell_doc ON dbo.prod_cell_doc_event.prod_cell_doc_id = dbo.prod_cell_doc.id
JOIN dbo.product_doc ON dbo.prod_cell_doc.product_doc_id = dbo.product_doc.id
JOIN dbo.doc ON dbo.product_doc.doc_id = dbo.doc.id
JOIN dbo.VUsers ON dbo.prod_cell_doc_event.user_id = dbo.VUsers.ID
where 1=1 AND prod_cell_doc_event.work_center_id=109 AND prod_cell_doc.prod_cell_id=107 AND prod_cell_doc_event.cd BETWEEN (select TRY_CONVERT(DATE,GETDATE())) AND (select TRY_CONVERT(DATE,(GETDATE()+1)))) s
Wynik:
BCP:
bcp "SELECT sum(s.glasscnt) AS szklenia, (SELECT ROUND(sum(s.product_time ),-1))AS jednostki from (SELECT '' as prod_cell_name, (SELECT COUNT(*) AS Expr1 FROM RedanC.dbo.prod_cell_doc AS pcd WHERE (pcd.prod_cell_id = 101) AND (pcd.product_doc_id = RedanC.dbo.prod_cell_doc.product_doc_id) AND (pcd.order_number = RedanC.dbo.prod_cell_doc.order_number)) AS glasscnt, product_doc.product_time FROM RedanC.dbo.prod_cell_doc_event JOIN RedanC.dbo.prod_cell_status ON RedanC.dbo.prod_cell_doc_event.prod_cell_status_id = RedanC.dbo.prod_cell_status.id JOIN RedanC.dbo.prod_cell_doc ON RedanC.dbo.prod_cell_doc_event.prod_cell_doc_id = RedanC.dbo.prod_cell_doc.id JOIN RedanC.dbo.product_doc ON RedanC.dbo.prod_cell_doc.product_doc_id = RedanC.dbo.product_doc.id JOIN RedanC.dbo.doc ON RedanC.dbo.product_doc.doc_id = RedanC.dbo.doc.id JOIN RedanC.dbo.VUsers ON RedanC.dbo.prod_cell_doc_event.user_id = RedanC.dbo.VUsers.ID where 1=1 AND prod_cell_doc_event.work_center_id=109 AND prod_cell_doc.prod_cell_id=107 AND prod_cell_doc_event.cd BETWEEN (select TRY_CONVERT(DATE,GETDATE())) AND (select TRY_CONVERT(DATE,(GETDATE()+1)))) s " queryout c:\temp\test.txt -c -t -U -T
Wynik:
Potrzebuje tak:
Edycja:
Wydaje mi się, że jak kolumny zostaną połączone to ten odstęp pokazany na obrazku wyżej zniknie, ale nie wychodzi mi połączenie tych dwóch kolumn, zbyt złożone zapytanie już się zrobiło...
EDYCJA2:
Już mam wynik który zawsze jest trzycyfrowy. Ponieważ dziś już wyniki powyżej 100 więc w przykładzie pokażę wynik zawsze czterocyfrowy:
SELECT RIGHT('0' +CAST(sum(s.glasscnt)AS VARCHAR(4)),4) AS szklenia, RIGHT('0' +CAST(ROUND (sum(s.product_time),0)AS VARCHAR(4)),4) AS Jednostki
from
(SELECT '' as prod_cell_name,
(SELECT COUNT(*) AS Expr1
FROM dbo.prod_cell_doc AS pcd
WHERE (pcd.prod_cell_id = 101) AND (pcd.product_doc_id = dbo.prod_cell_doc.product_doc_id) AND (pcd.order_number = dbo.prod_cell_doc.order_number))
AS glasscnt, product_doc.product_time
FROM dbo.prod_cell_doc_event
JOIN dbo.prod_cell_status ON dbo.prod_cell_doc_event.prod_cell_status_id = dbo.prod_cell_status.id
JOIN dbo.prod_cell_doc ON dbo.prod_cell_doc_event.prod_cell_doc_id = dbo.prod_cell_doc.id
JOIN dbo.product_doc ON dbo.prod_cell_doc.product_doc_id = dbo.product_doc.id
JOIN dbo.doc ON dbo.product_doc.doc_id = dbo.doc.id
JOIN dbo.VUsers ON dbo.prod_cell_doc_event.user_id = dbo.VUsers.ID
where 1=1 AND prod_cell_doc_event.work_center_id=109 AND prod_cell_doc.prod_cell_id=107 AND prod_cell_doc_event.cd BETWEEN (select TRY_CONVERT(DATE,GETDATE())) AND (select TRY_CONVERT(DATE,(GETDATE()+1)))) s
Wynik:
Pozostało tylko scalić te dwie kolumny i jestem w domu. Ktoś coś? :) Podpowie :)
EDYCJA 3:
Jednak mam efekt końcowy jaki chciałem. Zmieniając pierwszą linię aby wynik był zawsze trzycyfrowy (kod powyżej) zapytanie za pomocą BCP zwraca wynik do TXT i nie robi już odstępu między kolumnami mimo tego że jest w dwóch osobnych kolumnach.
Tak czy inaczej fajniej by to wyglądało jak by to było zapisane w jednej kolumnie.