-1
votes

Récupérer des enregistrements avec des jointures intérieures

Mon affectation consiste à obtenir le prénom, le deuxième prénom et le nom de famille de tous les clients ayant reçu une commande avant '2012-09-30' et après "2013-09-30". J'utilise l'aventureworks2017 sous la forme d'un échantillon dB

Table: Sales.SalesorderHeader P>

SELECT DISTINCT person_table.FirstName,
  person_table.MiddleName, 
  person_table.LastName,
  count(*) as Total_Instanses
FROM Sales.SalesOrderHeader as sales_order_table
inner join Sales.Customer as sales_customer_table
  on (sales_customer_table.CustomerID = sales_order_table.CustomerID)
inner join Person.Person as person_table
  on (person_table.BusinessEntityID = sales_customer_table.PersonID)
WHERE sales_order_table.OrderDate NOT BETWEEN '2012-09-30' AND '2013-06-30'
GROUP BY person_table.FirstName,
  person_table.MiddleName, 
  person_table.LastName
HAVING count(*) >= 2


2 commentaires

Schématiquement: Sélectionnez une personne à partir de Sales Rejoignez les personnes rejoignent les clients Groupe de clients par personne ayant compté (cas lorsque la date <'2012-09-30' puis 1 extrémité)> 0 et compte (cas lorsque la date> '2013-09-30' Puis 1 extrémité)> 0


Pensez à utiliser un de la clause avec uniquement personne.person et a clause avec existe sous-requêtes corrélées. Cela évitera le besoin de distinct aussi.


3 Réponses :


2
votes

Essayez ceci, je ne suis pas sûr que si cela fonctionne, je n'ai pas le jeu de données à tester, mais il faut

SELECT DISTINCT person_table.FirstName, 
  person_table.MiddleName, 
  person_table.LastName
FROM Sales.SalesOrderHeader as sales_order_table
inner join Sales.Customer as sales_customer_table
  on (sales_customer_table.CustomerID = sales_order_table.CustomerID
inner join Person.Person as person_table
  on (person_table.BusinessEntityID = match_result.PersonID)
WHERE sales_order_table.OrderDate NOT BETWEEN '2012-09-30' AND '2013-06-30'


0 commentaires

0
votes

Vous pouvez simplement utiliser ci-dessous. De plus, votre filtre des dates n'était pas correct.

SELECT DISTINCT p.FirstName, 
            p.MiddleName, 
            p.LastName
FROM Sales.SalesOrderHeader as s
INNER JOIN Sales.Customer as c                 
ON c.CustomerID = s.CustomerID
INNER JOIN Person.Person as p
ON p.BusinessEntityID = c.PersonID)
WHERE s.OrderDate >= '2012-09-30'     <----- add this
AND s.OrderDate <= '2013-06-30' )     ---- and this


0 commentaires

0
votes

Mon affectation consiste à obtenir le prénom, le deuxième prénom et le nom de famille de tous les clients ayant reçu une commande avant '2012-09-30' et après "2013-09-30".

une méthode utilise l'agrégation: xxx

Je dirai que cette condition a l'air suspecte: xxx

Toutefois, est ce que vous utilisez dans votre requête. Je m'attendrais à ce que la table de la personne ait une pièce d'identité appelée quelque chose comme PersonID .


1 commentaires

Nouirement pas pour, c'est affaires