Fragensteller
SSRS & SQL: datetime-Abfrage und Ermittlung der Anzahl der genutzten Monate bei Gruppierung über Artikel möglich?

Frage
-
Hallo zusammen,
leider verfolgt mich mal wieder die lieben Zeitformate/Abfrage. Freue mich auf Tipps, da ich nicht weiterkommen:
1.) Ich sichere einen Lauf der das Importdatum wegsichert und zwar im Format datetime. In Access kann ich das Importdatum mit Uhrzeit über # datetime # abfragen, aber wie geht dies auf dem SQL-Server? Bspw. Importdatum ='2020-09-01 00:0:11.190' oder Importdatum =#2020-09-01 00:00:11.190# erzeugt eine Fehlermeldung
2.) Div. Artikel haben zig Verbrauchsbuchungen und teilweise in bestimmten Monaten nicht. Die ausgewählten Monate über ALLE Artikel zu ermittelt klappt über das Select gut (s.Abb. SQL unten). Ergänze ich aber nur die Artikelnummer "ANR" beim Select und in der Gruppierung und und als Feld und frage im SSRS-Report über
=Lookup(Fields!ANR.Value,Fields!ANR.Value, Fields!Anzahl_Monat.Value, "Anzahl_Periodenauswahl"):
die Anzahl der bebuchten Monate ab, kommt nicht nachvollziehbarer Müll raus. So richtiges Verständnis dafür habe ich nicht, da ich den Datenraum ja vorher eingrenze und er doch damit die 1 nur auf ANR & Monat&Jahr gruppiert durchzählen müsste?
SELECT
sum(1) As Anzahl_Monat
FROM
Vw_FACT_Lagerbuchungen
where ANR like case when @ANR='alle' then ANR else '%' + @ANR + '%' end and Monat in (@Monat) and Jahr in (@Jahr) and ANR_Kennung = case when @Kennung = 'alle' then ANR_Kennung else @Kennung end and PGR in (@PGR) and Buchungsart in (@Buchungsart) and KST1 = case when @KST1 = 'alle' then KST1 else @KST1 end
group by ( Cast(Vw_FACT_Lagerbuchungen.Jahr as nvarchar(4)) + trim(Cast(Vw_FACT_Lagerbuchungen.Monat as nvarchar(2))))Vielen Dank für Erläuterung was im Ansatz falsch ist.
Gruß
Chris
- Bearbeitet Controller123 Montag, 7. September 2020 12:25
Alle Antworten
-
Hi,
poste bitte CREATE TABLE Statements für die Quelltabellen, INSERT INTO Statements für Beispieldaten und dazu bitte noch die gewünschten Ergebnisse, basierend auf exakt den geposteten Beispieldaten.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Bei Punkt 1 wäre es auch hilfreich zu erfahren, welche Fehlermeldung kommt!
Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu
Bei
SELECT TOP (1000) [ANR]
,[Lagerort]
,[Bestandsmenge]
,[Monat]
,[Jahr]
,[Importzeit]
FROM [SST_IFAX].[dbo].[tbl_FACT_Lagerbestand_Monatsinventur]
where Importzeit = #2020-09-01 00:00:11.190#kommt Fehlermeldung:
Meldung 102, Ebene 15, Status 1, Zeile 10
Falsche Syntax in der Nähe von "00".Das ganze mit where Importzeit = '2020-09-01 00:00:11.190'
ergibt keine Ergebnisse, ob wohl der Feldinhalt aus Importzeit exakt rauskopiert wurde.
-
zu 2.) das mit sum(1) war Mist......
Ergänze ich das SQL wie folgt kommt zwar das richtige Ergebnis raus, doch der Lookup unter SRRS lässt keine Aggregation zu, so dass ich das Ergebnis im SQL erzeugen muss aber wie? Ich müsste jetzt nochmal ein weiteres SQL (Dataset) im SQL (bzw. im SSRS-Report) ergänzen, was das Feld Anzahl_Monat (also die 1) summiert.
Select
Vw_FACT_Lagerbuchungen.ANR
,( Cast(Vw_FACT_Lagerbuchungen.Jahr as nvarchar(4)) + trim(Cast(Vw_FACT_Lagerbuchungen.Monat as nvarchar(2)))) As Monat
,1 as Anzahl_Monatwhere......
group by .....
Wie hier der Lösungsansatz in einem SQL bzw. im Reportbuilder, der mir leider als Auswahl nur die Tabellen und Sichten vom SQL-Server anzeigt und nicht den Zugriff auf ein internes Dataset des Report?
- Bearbeitet Controller123 Montag, 7. September 2020 13:47
-
Hi,
gerne nochmal:
poste bitte CREATE TABLE Statements für die Quelltabellen, INSERT INTO Statements für Beispieldaten und dazu bitte noch die gewünschten Ergebnisse, basierend auf exakt den geposteten Beispieldaten.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Erstens mal, die Datumskonvertierung aus String ist Sprachabhängig, deswegen sollte man immer unter Angabe der Formatinformation konvertieren, hier ist es das ODBC Format = Code 120
select convert(datetime, '2020-09-01 00:00:11.191', 120)
Dann im Hinterkopf behalten, das Datetime eine maximal Auflösung von 3 Millisekunden hat. Oben habe ich 191 ms angegeben, als Datetime kommt dann doch wieder 190 ms bei raus.
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Hi,
gerne nochmal:
poste bitte CREATE TABLE Statements für die Quelltabellen, INSERT INTO Statements für Beispieldaten und dazu bitte noch die gewünschten Ergebnisse, basierend auf exakt den geposteten Beispieldaten.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
ich bin mir nicht genau sicher ob das gemeint ist:
zu 1.)
Das Feld Importdatum fülle ich über Visual Studio mittelts feld-update & SQL-Statement über getdate() Die restlichen Felder sind vorher per SQL-Statement über VS per Editor gefüllt. Daher weiß ich nicht wie genau ich was zur Quelltabelle posten soll, da es eigentlich egal sein sollte, da nur das Importdatum abgefragt werden soll.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl_FACT_Lagerbestand_Monatsinventur](
[ANR] [nvarchar](21) NULL,
[Lagerort] [int] NULL,
[Bestandsmenge] [decimal](15, 3) NULL,
[Monat] [int] NULL,
[Jahr] [int] NULL,
[Importzeit] [datetime] NULL
) ON [PRIMARY]
GOzu 2.) wäre dies eine Lösung:
Wie erzeuge ich die Summe die oben genannten "Unterabfrage" , wenn ich das finale SQL über ANR gruppiert und Anzahl_Monat summiert haben möchte.
Also quasi so wie hier vereinfacht unter MySQL- Bearbeitet Controller123 Montag, 7. September 2020 14:24
-
Bilde mittels Datepart einen neuen Begriff (ggf. per View). Mit diesem kannst du dann auch gruppieren.
datepart(year, Importzeit) * 100 + datepart(month, Importzeit)
https://docs.microsoft.com/de-de/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15