Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [SQL bzw. TSQL] Komplizierte SQL Anweisung (https://www.delphipraxis.net/117361-%5Bsql-bzw-tsql%5D-komplizierte-sql-anweisung.html)

ferby 16. Jul 2008 17:09

Datenbank: MS SQL Server 2005 • Zugriff über: MS SQL Server 2005 Management Studio

[SQL bzw. TSQL] Komplizierte SQL Anweisung
 
Hallo,

ich weiß der Titel ist nicht sehr ausagekräftig, aber mir ist grad nix besseres eingefallen...


Also zu meinen eigentlichen Problem:

Ich habe eine Tabelle mit den Spalten
Company (hier steht immer 40 oder 60 drin)
NR (hier steht irgendein int drin)
Description (hier steht irgendein string)

Jetzt will ich alle Caption's auslesen die in 40+60 vorkommen,
wobei gilt, wenn es eine NR schon in 40 gibt, soll der Datensatz der Company 60 mit dieser NR weggelassen werden.

Ich habe mir sowas überlegt:

select distinct nr, Description from mytable

Leider geht das nicht, da die Description zu den selben NR der zwei Companys nicht eindeutig ist...


Hoffe man versteht mein Problem ;-)
Nein, nicht?

Na dann noch ein Beispiel:

Company NR Description
40 ------- 1 -- Hallo
40 ------- 2 -- Auto
60 ------- 1 -- Essen
60 ------- 5 -- Baum
60 ------- 3 -- Notebook
40 ------- 5 -- Müll

Ich will jetzt alles was vorkommt, wenn eine NR doppelt vorkommt, dann die wo Company = 40 ist.
also:

1 Hallo
2 Auto
3 Notebook
5 Müll

Wie muss hier die SQL Anweisung aussehen?



Ferby

shmia 16. Jul 2008 17:12

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
SQL-Code:
SELECT nr, Description FROM mytable
WHERE Company = '40'
GROUP BY nr, Description
HAVING Count(*) > 1
Edit: bitte streichen, das ist wohl nicht das was du willst

mkinzler 16. Jul 2008 17:17

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
SQL-Code:
select
    distinct t1.nr,
    t2 Description
from
    mytable t1 
        join mytabel t2 pn t2.nr = t1.nr
where
    t1.company in (60,90)
order by
    t1.nr, t1.company;

ferby 16. Jul 2008 18:21

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
Hello,

@shmia: ja ist leider wirklich nicht das was ich gebraucht habe

@mkinzler: Habe auch schon an einen join gedacht, aber geglaubt, dass es auch ohne irgendwie lösbar sein muss...
werde morgen in der Firma mal dein Statment ausprobieren,
Kann jetzt nicht ganz nachvolziehen ob's funktioniert, weil

Code:
where
    t1.company in (60,40) --nehm mal an du meinst 40 und nicht 90 !?
ist in meinen Augen immer true, da company es ja nur 60 oder 40 sein kann

und warum

Code:
select
    distinct t1.nr,
    t2 Description
denn wenn die nr bei beiden vorommt, soll die descrition von der firma 40 genommen werden,
wo macht das deine Abfrage?



Vielen Dank

omata 16. Jul 2008 18:39

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
SQL-Code:
SELECT company, nr, description
FROM mytable x
WHERE company = 40
   OR (    company = 60
       AND NOT EXISTS (SELECT * 
                       FROM mytable
                       WHERE company = 40
                         AND nr = x.nr))

ferby 16. Jul 2008 18:45

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
Hello,

also das schaut auf den ersten Blick super aus, glaub das müsst funktionieren,
werde morgen bescheid geben

nahpets 16. Jul 2008 18:49

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
Hallo,

versuch' es mal damit:

SQL-Code:
/* Unser Endergebnis soll so aussehen */
select Company, Nr, Description from mytable
where Nr in
(
  /* Wir wollen nur die Nr haben */
  select nr from (
    /* Wir wollen die kleinere Nr von denen, die mehr als einmal vorkommen */
    select nr, min(company) from mytable
    where nr in
    (
      /* Wir wollen wissen, welche Nr mehr als einmal vorkommt. */
      select nr from (
        /* Wir zählen das Vorkommen von Nr */
        select nr, count(*) As Anzahl from mytable group by nr
      ) zwischenergebnis_1
      where anzahl > 1
    ) group by nr
  ) zwischenergebnis_2
)
Das von omata dürfte auch funktionieren.

Stephan

ferby 16. Jul 2008 18:56

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
müsste so auf den ersten blick auch funktionieren, werde mir aber morgen das mal genau angucken

ferby 17. Jul 2008 09:42

Re: [SQL bzw. TSQL] Komplizierte SQL Anweisung
 
Hello,

super SQL Statments funktionieren.

Danke ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz