2017-04-19 2 views
0

kann ich den Wert auf dem Tisch mit dem gleichen Wert auf SQL vergleichen, ohne die neue Tabelle sql output Selisih bedeutet Differenz zwischen dem Wert und nilai bedeutet Wertsql den Wert auf dem gleichen Tisch zu vergleichen

Create table tblData(
    nourut int, 
    nama varchar(50), 
    nilai int 
); 
Create table tblData1(
    nourut int, 
    nama varchar(50), 
    nilai int 
); 
insert into tblData values 
(1,"Yuanita Prabandini Soesilo",85), 
(2,"Marco Anthonius Pareira",80), 
(3,"William Jaya Dwipangga",95); 
insert into tblData1 values 
(1,"Yuanita Prabandini Soesilo",85), 
(2,"Marco Anthonius Pareira",80), 
(3,"William Jaya Dwipangga",95); 
select tblData.nama as namamhs, 
tblData.nilai, 
tblData1.nama, 
tblData1.nilai, 
case 
when(tblData.nilai-tblData1.nilai<0) 
then (tblData.nilai-tblData1.nilai)*-1 
when(tblData.nilai-tblData1.nilai>=0) 
then (tblData.nilai-tblData1.nilai) 
end as selisih 
from tblData,tblData1 
where tblData1.nama<>tblData.nama 
order by tblData1.nama DESC; 

Schaffung Ich erstelle zwei tblData, um zu vergleichen, was nicht effizient ist, eine andere Möglichkeit, den Wert in der gleichen Tabelle zu vergleichen, ohne die neue Tabelle zu erstellen?

Antwort

0

nur eine Tabelle benötigt wird, in der FROM-Klausel Sie geben jedem Tisch ein Alias, so dass Sie die Tabelle in die Abfrage zweimal bringen kann:

select t1.nama as namamhs, 
t1.nilai, 
t2.nama, 
t2.nilai, 
case 
when(t1.nilai-t2.nilai<0) 
then (t1.nilai-t2.nilai)*-1 
when(t1.nilai-t2.nilai>=0) 
then (t1.nilai-t2.nilai) 
end as selisih 
from tblData as t1, tblData as t2 
where t1.nama<>t2.nama 
order by t2.nama DESC; 
+0

Es funktioniert! Vielen Dank für die Lösung – Sam

0

Ja, Sie können JOIN eine Tabelle mit sich selbst, indem sie ein ALIAS mit .

SELECT 
    d1.nama as namamhs, 
    d1.nilai, 
    d2.nama, 
    d2.nilai, 
    CASE 
    WHEN (d1.nilai - d2.nilai < 0) 
     THEN (d1.nilai - d2.nilai) * -1 
    WHEN (d1.nilai - d2.nilai >= 0) 
     THEN (d1.nilai - d2.nilai) 
    END AS selisih 
FROM tblData d1 
INNER JOIN tblData d2 ON d1.nama <> d2.nama 
ORDER BY d2.nama DESC; 
0

Sie können dies versuchen:

select 
    a.nama, 
    a.nilai, 
    b.nama, 
    b.nilai, 
    abs(a.nilai-b.nilai) 
from tbldata as a ,tbldata as b 
where a.nama<>b.nama 
order by b.nama desc 
Verwandte Themen