Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


SQL-fråga, sortera på datum

Postades av 2009-05-12 09:50:00 - Anders Mejner, i forum sql-server/msde, Tråden har 9 Kommentarer och lästs av 2016 personer

Hej,

jag har en tabell med datum, instrument och värden. Det är inte säkert att ett instrument har ett värde för alla tidpunkter som ett annat instrument här värden för.

Jag skulle villja få ett recordset som ser ut som följande:

2009-05-12 0,1 0,3
2009-05-11 0,2
2009-05-09 0,5 2,1
2009-05-07 0,5

Kan någon peka mig i rätt riktning? Just nu löser jag det här med VB-kod från ett recordset som ser ut så här:

2009-05-12 0,1
2009-05-12 0,3
2009-05-11 0,2
2009-05-09 0,5
2009-05-09 2,1
2009-05-07 0,5

Men det är lite meckigt. Går det att lösa i SQL:n vore det jäkligt trevligt.


Svara

Sv: SQL-fråga, sortera på datum

Postades av 2009-05-12 09:58:08 - Niklas Jansson

SELECT A.DT, A.Value, B.Value FROM Table A OUTER JOIN Table B ON A.DT = B.DT


Svara

Sv: SQL-fråga, sortera på datum

Postades av 2009-05-12 09:58:50 - Håkan Borneland

Nu så.

@Niklas
Finns inget som heter OUTER JOIN i SQL Server,
FULL OUTER JOIN , RIGHT OUTER JOIN eller LEFT OUTER JOIN ska det vara.
Du får själv skriva in det du tänkte på.
För övrigt så kommer frågan inte ge efterfrågat resultat hur du än skriver JOINen.

@Anders
Om du använder SQL Server 2005/2008 kan du använda UNPIVOT operatorn.
Så här (bifogar en exempeltabell med din testdata):
<code>
DECLARE @tabell TABLE(datum datetime, värde1 decimal(2,1), värde2 decimal(2,1));

INSERT INTO @tabell VALUES('2009-05-12', 0.1, 0.3);
INSERT INTO @tabell VALUES('2009-05-11', 0.2, NULL);
INSERT INTO @tabell VALUES('2009-05-09', 0.5, 2.1);
INSERT INTO @tabell VALUES('2009-05-07', NULL, 0.5);

SELECT
CONVERT(varchar(10), datum, 120) AS datum,
värde
FROM
(SELECT datum, värde1, värde2 FROM @tabell) p
UNPIVOT
(värde FOR värden IN (värde1, värde2)) AS unpvt;
</code>


Svara

Sv: SQL-fråga, sortera på datum

Postades av 2009-05-12 15:31:27 - Håkan Borneland

... om du inte har SQL Server 2005/2008 kan du skriva så här:

<code>
DECLARE @tabell TABLE(datum datetime, värde1 decimal(2,1), värde2 decimal(2,1));

INSERT INTO @tabell VALUES('2009-05-12', 0.1, 0.3);
INSERT INTO @tabell VALUES('2009-05-11', 0.2, NULL);
INSERT INTO @tabell VALUES('2009-05-09', 0.5, 2.1);
INSERT INTO @tabell VALUES('2009-05-07', NULL, 0.5);

SELECT
a.datum,
a.värde
FROM
(SELECT
CONVERT(varchar(10), datum, 120) AS datum,
värde1 AS värde
FROM @tabell
UNION
SELECT
CONVERT(varchar(10), datum, 120) AS datum,
värde2 AS värde
FROM @tabell) a
WHERE värde IS NOT NULL
ORDER BY a.datum DESC;
</code>


Svara

Sv:SQL-fråga, sortera på datum

Postades av 2009-05-12 16:21:39 - Anders Mejner

Hej!

Tack för hjälpen!

Nu kanske jag förklarade dåligt. Kör jag med temp-tabell får jag ut:

<code>
DECLARE @tabell TABLE(datum datetime, värde1 decimal(2,1), värde2 decimal(2,1));

INSERT INTO @tabell VALUES('2009-05-12', 0.1, 0.3);
INSERT INTO @tabell VALUES('2009-05-11', 0.2, NULL);
INSERT INTO @tabell VALUES('2009-05-09', 0.5, 2.1);
INSERT INTO @tabell VALUES('2009-05-07', NULL, 0.5);

SELECT
*
FROM
@tabell

Running [dbo].[StoredProcedure1].

datum värde1 värde2
------ ------ ------
2009-0 0,1 0,3
2009-0 0,2 NULL
2009-0 0,5 2,1
2009-0 NULL 0,5
(4 row(s) affected)
(4 row(s) returned)
@RETURN_VALUE = 0
Finished running [dbo].[StoredProcedure1].
</code>

Kör jag ditt förslag så:

<code>
DECLARE @tabell TABLE(datum datetime, värde1 decimal(2,1), värde2 decimal(2,1));

INSERT INTO @tabell VALUES('2009-05-12', 0.1, 0.3);
INSERT INTO @tabell VALUES('2009-05-11', 0.2, NULL);
INSERT INTO @tabell VALUES('2009-05-09', 0.5, 2.1);
INSERT INTO @tabell VALUES('2009-05-07', NULL, 0.5);

SELECT
a.datum,
a.värde
FROM
(SELECT
CONVERT(varchar(10), datum, 120) AS datum,
värde1 AS värde
FROM @tabell
UNION
SELECT
CONVERT(varchar(10), datum, 120) AS datum,
värde2 AS värde
FROM @tabell) a
WHERE värde IS NOT NULL
ORDER BY a.datum DESC;

Running [dbo].[StoredProcedure1].

datum värde
---------- ------
2009-05-12 0,1
2009-05-12 0,3
2009-05-11 0,2
2009-05-09 0,5
2009-05-09 2,1
2009-05-07 0,5
(4 row(s) affected)
(6 row(s) returned)
@RETURN_VALUE = 0
Finished running [dbo].[StoredProcedure1].
</code>

Men det första sättet att göra det på är ju precis det jag vill ha. Fast jag vet inte hur många kolumner jag behöver, men jag skulle kunna begränsa det till sex stycken. Layout-mässigt finns det också en gräns.


Svara

Sv:SQL-fråga, sortera på datum

Postades av 2009-05-12 16:52:48 - Niklas Jansson

<b>Finns inget som heter OUTER JOIN i SQL Server,</b>
Jag har åtminstone för mig att OUTER JOIN = FULL OUTER JOIN I SQL92?

<b>För övrigt så kommer frågan inte ge efterfrågat resultat hur du än skriver JOINen.</b>
Det är helt rätt, tyvärr tror jag inte att du riktigt har förstått frågan heller...



Anders: Det du ska göra är någon form av pivotering. Det står att du har en kolumn för instrument också, men det visar du inte i ditt första exempel. Jag antar att det finns.

Det finns inbyggt stöd för det du vill göra i SQL Server, men är inte standard. Det är dock inte speciellt komplicerat att göra själv genom att dynamiskt bygga upp en sql-sats.

1. Hämta dina instrument.
instruments = SELECT ID FROM Instruments

2. Hämta ut alla värden för ett instrument
values_x = SELECT Date, Value FROM Table WHERE InstrumentID = X

3. Slå ihop dem med joinar:
(SELECT Date, Value FROM Table WHERE InstrumentID = 1) AS A
FULL OUTER JOIN
(SELECT Date, Value FROM Table WHERE InstrumentID = 2) AS B ON A.DATE = B.DATE
FULL OUTER JOIN
(SELECT Date, Value FROM Table WHERE InstrumentID = 3) AS C ON A.DATE = C.DATE
FULL OUTER JOIN
(SELECT Date, Value FROM Table WHERE InstrumentID = 4) AS D ON A.DATE = D.DATE
...

4. Hämta ut alla kolumner:
SELECT A.Date, A.Value, B.Value, C.Value ... FROM
(SELECT Date, Value FROM Table WHERE InstrumentID = 1) AS A
FULL OUTER JOIN
(SELECT Date, Value FROM Table WHERE InstrumentID = 2) AS B ON A.DATE = B.DATE
FULL OUTER JOIN
(SELECT Date, Value FROM Table WHERE InstrumentID = 3) AS C ON A.DATE = C.DATE
FULL OUTER JOIN
(SELECT Date, Value FROM Table WHERE InstrumentID = 4) AS D ON A.DATE = D.DATE
...


Svara

Sv: SQL-fråga, sortera på datum

Postades av 2009-05-12 20:33:27 - Anders Mejner


Här kommer jag lära mig mycket! Jag ska nog läsa på lite om "pivotering" (som jag inte har hört talas om tidigare).

Det är flera tabeller som ska joinas in men både värde och instrumentnummer ligger i samma tabell.

Återkommer efter lite försök på egen hand!


Svara

Sv:SQL-fråga, sortera på datum

Postades av 2009-05-13 13:26:41 - Håkan Borneland

@Anders
Eftersom du ville lära dig mer om pivotering så...
Här kommer en lösning som använder PIVOT operatorn.
OBS! Gäller för SQL Server 2005/2008
<code>
DECLARE @tabell TABLE(date datetime, varde decimal(2,1));

INSERT INTO @tabell VALUES('2009-05-12', 0.1);
INSERT INTO @tabell VALUES('2009-05-12', 0.3);
INSERT INTO @tabell VALUES('2009-05-11', 0.2);
INSERT INTO @tabell VALUES('2009-05-09', 0.5);
INSERT INTO @tabell VALUES('2009-05-09', 2.1);
INSERT INTO @tabell VALUES('2009-05-07', 0.5);

SELECT date, [1] AS Värde1, [2] AS Värde2
FROM
(
SELECT
date,
varde,
ROW_NUMBER() OVER(PARTITION BY date ORDER BY varde) AS seq
FROM @tabell
)st
PIVOT
(
MAX(Varde)
FOR SEQ IN ([1],[2])
)pvt
ORDER BY date DESC;
</code>

Det som jag inte får kläm på är vad det är som styr att t.ex 0,5 här under ska vara på värde2
och inte i värde1
2009-05-07 0,5

I PIVOT lösningen ovan hanteras inte det beroende på indata.


@Niklas
<b>tyvärr tror jag inte att du riktigt har förstått frågan heller</b>
Nä precis, du har helt rätt jag hade inte förstått frågan (tyvärr being the operative word) <:(
Däremot så finns det mig veterligen ingen implicit tolkning i ANSI SQL -92 mellan OUTER --> FULL.


Svara

Sv: SQL-fråga, sortera på datum

Postades av 2009-05-27 10:00:18 - Anders Mejner

Fungerar mycket bra!

Tackar.


Svara

Nyligen

  • 21:28 Chicken Road Casino Game
  • 21:21 1xBet Promo Code 2025
  • 18:37 Remove the bumper in AUDI
  • 15:35 Chicken road crash game
  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 924
27 965
271 780
525
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies