[gelöst]Abfrage Kunden mit Erst-Angebot

11. November 2009 10:13

Hallo,

ich möchte gerne einen Bericht bzw. eine erweiterte Abfrage machen.
Ich habe als Entität Firma und tw-Angebote. Die Beziehung ist 1 zu N.
Nun brauche ich alle Firmen, die z.B. im Monat Oktober ein Angebot erhalten haben, aber noch die in den Monaten davor. Sprich, alle Firmen die ein Erst-Angebot erhalten haben.

Ich hoffe ihr versteht was ich meine. In unserem PPS gibt es nämlich keine Unterscheidung von Kunde, Interessent etc. Es kann sein, ein Adresse steht schon 3 Jahre im Kundenstamm, aber erst letzten Monat wurde das erste Mal angefragt bzw. ein Angebot rausgeschickt!

Die Abfrage welche Kunde im MOnat x ein Angebot bekommen hat ist ja easy, aber im Zusammenspiel muss ja geprüft werden, dass es davor nie ein Angebot bekommen hat!

Danke für die Hilfe.

gruß
tw-elektric
Zuletzt geändert von tw-elektric am 12. November 2009 11:50, insgesamt 2-mal geändert.

Re: Abfrage Kunden mit Erst-Angebot

11. November 2009 10:37

Hallo,

über eine erweiterte Suche wird du das nicht hinbekommen, da wirst du einen Report benötigen.

Re: Abfrage Kunden mit Erst-Angebot

11. November 2009 12:03

dachte ich mir fast...
aber mir fehlt einfach einfach die idee des sql statments?
bzw. die verneinte suche, nach keine angeboten in einem zeitraum

Re: Abfrage Kunden mit Erst-Angebot

11. November 2009 13:13

Das SQL-Statement ist gar nicht so kompliziert, in etwa:

SELECT * from Table t1 where month(date) = month(date) -1
AND (Select count(*) as anzahl from angebote a1 where t1.id = a1.id = 1)

Dann noch das join auf die ANgebote dazu, das wars.

Idee dahinter ist sehr einfach. Du selektierst dir erst alle Angebote des Vormonats und holst dir dann mit dem Count nur die Kunden, die nur ein Angebot haben.

Re: Abfrage Kunden mit Erst-Angebot

11. November 2009 15:36

Hallo,

dnke für deine Hilfe.
Ich habe die SQL Abfrage nun soweit, dass alle engezeigt werden, die nur eine Anfrage bekommen habe. Wenn ich jetzt noch das Datum mit einspielen lassen möchte, dann habe ich das früher immer so gemacht:
WHERE datum between '2000-01-01' and '2009-12-31'

Das geht so nicht. Das es ja Timestamp Felder sind. Wie kann ich z.B. abfragen
WHERE datum = letzten 10 Jahre oder letzten 5 Monate etc? So wie in den CRM Filter...

Danke
Gruß
tw-elektric

EDIT
ich habe das convert vergessen :)
CONVERT(datetime, '01.10.2009')

Re: Abfrage Kunden mit Erst-Angebot

11. November 2009 16:08

So, nun habe ich es so:

Code:
SELECT [New_parentaccountidName]
      ,[New_bezeichnung1]
      ,[New_bezeichnung2]
      ,[New_Bezeichnung3]
      ,[New_angebotnummer]
      ,[New_parentaccountid]
      ,[New_produktgruppe]
      ,[New_lagenanzahl]
      ,[New_datum]
      ,[New_pauschalpreis]
      ,[New_erstmuster]
      ,[New_serienmuster]
      ,[New_serie]
      ,[New_expressmuster]
      ,[New_erstserie]
  FROM [tw_elektric_MSCRM].[dbo].[New_offer] a1
  WHERE month([New_datum])= 10
  AND (
  SELECT COUNT(*) as Anzahl
  FROM [tw_elektric_MSCRM].[dbo].[New_offer] b1
  WHERE a1.[New_parentaccountidName] = b1.[New_parentaccountidName]
    GROUP BY [New_parentaccountidName]
  ) = 1
  GO


Wenn jetzt aber ein Kunde im Monat Oktober z.B. 2 oder 3 Angebote bekommt, möchte ich das tortzdem in meiner Auswertung stehen haben, da dieser sonst in den Monaten davor noch nie was angefragt hat.
jetzt dachte ich mir, ich drehe es um und gebe bei der unterabfrage ein datum an:

Code:
SELECT COUNT(*) as Anzahl,
[New_parentaccountidName]
  FROM [tw_elektric_MSCRM].[dbo].[New_offer] b1
  WHERE New_datum < CONVERT(datetime, '01.10.2009')
  GROUP BY [New_parentaccountidName]


jetzt kommt bei allen datensätzen, wo es keinen treffer gibt, auch nichts zurück bzw. kein nicht per count gezählt werden. darum wollte ich dies so mache:

Code:
AND (
  SELECT COUNT(*) as Anzahl
  FROM [tw_elektric_MSCRM].[dbo].[New_offer] b1
  WHERE a1.[New_parentaccountidName] = b1.[New_parentaccountidName]
 AND New_datum < CONVERT(datetime, '01.10.2009')
    GROUP BY [New_parentaccountidName]
  ) = NOTHING


aber das geht nicht!

Re: Abfrage Kunden mit Erst-Angebot

11. November 2009 16:58

Hallo,

ohne es jetzt getestet zu haben, so sollte es funktionieren:
Code:
SELECT [New_parentaccountidName]
      ,[New_bezeichnung1]
      ,[New_bezeichnung2]
      ,[New_Bezeichnung3]
      ,[New_angebotnummer]
      ,[New_parentaccountid]
      ,[New_produktgruppe]
      ,[New_lagenanzahl]
      ,[New_datum]
      ,[New_pauschalpreis]
      ,[New_erstmuster]
      ,[New_serienmuster]
      ,[New_serie]
      ,[New_expressmuster]
      ,[New_erstserie]
  FROM [tw_elektric_MSCRM].[dbo].[New_offer] a1
  WHERE month([New_datum])= 10
  AND (
  SELECT COUNT(*) as Anzahl
  FROM [tw_elektric_MSCRM].[dbo].[New_offer] b1
  WHERE a1.[New_parentaccountidName] = b1.[New_parentaccountidName]
  AND month([New_datum]) = 10
    GROUP BY [New_parentaccountidName]
  ) > 0
  GO

Re: Abfrage Kunden mit Erst-Angebot

12. November 2009 09:18

okay, funktioniert. aber natürlich nur direkt in der datenbank.
jetzt wollte ich das ganze ummodeln für den Bericht.

Code:
declare @SQL nvarchar(max)
 set @SQL = '
SELECT newOffer0.[New_parentaccountidName]
      ,newOffer0.[New_bezeichnung1]
      ,newOffer0.[New_bezeichnung2]
      ,newOffer0.[New_Bezeichnung3]
      ,newOffer0.[New_angebotnummer]
      ,newOffer0.[New_parentaccountid]
      ,newOffer0.[New_produktgruppe]
      ,newOffer0.[New_lagenanzahl]
      ,newOffer0.[New_datum]
      ,newOffer0.[New_pauschalpreis]
      ,newOffer0.[New_erstmuster]
      ,newOffer0.[New_serienmuster]
      ,newOffer0.[New_serie]
      ,newOffer0.[New_expressmuster]
      ,newOffer0.[New_erstserie]
  FROM (' + @CRM_FilteredNew_Offer + ') as newOffer0
WHERE (
SELECT COUNT(*) as Anzahl
FROM (' + @CRM_FilteredNew_Offer + ') as newOffer1
WHERE newOffer0.[New_parentaccountidName] = newOffer1.[New_parentaccountidName]
GROUP BY newOffer1.[New_parentaccountidName]
) = 1
'
 exec(@SQL)


Nun brauche ich die werte aus (' + @CRM_FilteredNew_Offer + ') zwei mal.
Einmal für die selektierung in der ersten Abfrage. Und das zweite mal für die Unterabfrage.
Das Problem ist, dass in (' + @CRM_FilteredNew_Offer + ') ja nur ein Datenbestand sein kann. Und bei der ersten Abfrage habe ich z.B. nur die Datensätze eines bestimmten Monats gefiltert, aber bei der zweiten Abfrage wo gezählt wird, muss ich ja alle Datensätze komplett auswerten.

Wie kann ich dies machen? Wenn ich die zweite Abfrage direkt auf der Tabelle mache (New_Offer) dann funtkioniert es als Administrator, aber nicht als CRM User...

Re: Abfrage Kunden mit Erst-Angebot

12. November 2009 09:27

sie dir mal diesen Artikel an:
http://blogs.javista.com/2009/03/18/mic ... ring-tips/