32 messaggi dal 13 agosto 2017
Scusami prova questi codice qui:

CREATE TABLE [dbo].[Esempio](
  [Id] [int] NOT NULL,
  [CodiceFiscale] [nvarchar](50) NULL,
  [Dal] [datetime] NULL,
  [Al] [datetime] NULL,
 CONSTRAINT [PK_Esempio] PRIMARY KEY CLUSTERED 
(
  [Id] ASC
))
GO

INSERT INTO Esempio(Id, CodiceFiscale, Dal, Al)
VALUES
(1, 'ITCCCCC', '2017-02-01T00:00:00', '2017-02-13T00:00:00')
(2, 'ITCCCCC', '2017-04-01T00:00:00', '2017-04-13T00:00:00')


DECLARE @RicercaDal AS DATETIME, @RicercaAl  AS DATETIME
SET @RicercaDal = '2017-01-01'
SET @RicercaAl = '2017-04-13'
/*
SELECT Al FineFerie, @Al Ricerca, IIF(Al < @Al, Al, @Al)
FROM Esempio
WHERE Dal BETWEEN @Dal AND @Al 
OR Al BETWEEN @Dal AND @Al
*/

SELECT IIF(Dal > @RicercaDal, Dal, @RicercaDal) FinestraRicercaDal, 
IIF(Al < @RicercaAl, Al, @RicercaAl) FinestraRicercaAl,
Dal, Al,
DATEDIFF(day, IIF(Dal > @RicercaDal, Dal, @RicercaDal), IIF(Al < @RicercaAl, Al, @RicercaAl)) DIFFERENZA 
FROM Esempio
WHERE Dal BETWEEN @RicercaDal AND @RicercaAl 
OR Al BETWEEN @RicercaDal AND @RicercaAl
244 messaggi dal 22 gennaio 2017
Contributi
Scusa, forse non sto capendo.
Se un dipendente fa ferie dal:
1/2 al 13/2
e dal
1/3 al 3/3
Tu vorresti la somma, correto?
32 messaggi dal 13 agosto 2017
Si prova l'ultimo codice che ti ho postato....non deve darmi 12 bensì 26 (13 giorni di febbraio e 13 di aprile)
244 messaggi dal 22 gennaio 2017
Contributi
DECLARE @RicercaDal AS DATETIME, @RicercaAl  AS DATETIME
SET @RicercaDal = '2017-01-01'
SET @RicercaAl = '2017-04-10'

SELECT 
SUM(DATEDIFF(day, IIF(Dal > @RicercaDal, Dal, @RicercaDal), IIF(Al < @RicercaAl, Al, @RicercaAl)) + 1) DIFFERENZA 
FROM Esempio
WHERE Dal BETWEEN @RicercaDal AND @RicercaAl 
OR Al BETWEEN @RicercaDal AND @RicercaAl
GROUP BY CodiceFiscale
32 messaggi dal 13 agosto 2017
No, la differenza=26 non 13! mi deve fare la somma....
Modificato da MarkRoss il 14 agosto 2017 17.03 -
Modificato da MarkRoss il 14 agosto 2017 17.08 -
244 messaggi dal 22 gennaio 2017
Contributi
Il seguente codice su SQL SERVER mi da il seguente esito:
CodiceFiscale DIFFERENZA
ITCCCCC 26

CREATE TABLE [dbo].[Esempio](
  [Id] [int] NOT NULL,
  [CodiceFiscale] [nvarchar](50) NULL,
  [Dal] [datetime] NULL,
  [Al] [datetime] NULL,
 CONSTRAINT [PK_Esempio] PRIMARY KEY CLUSTERED 
(
  [Id] ASC
))
GO

INSERT INTO Esempio(Id, CodiceFiscale, Dal, Al)
VALUES
(1, 'ITCCCCC', '2017-02-01T00:00:00', '2017-02-13T00:00:00'),
(2, 'ITCCCCC', '2017-04-01T00:00:00', '2017-04-13T00:00:00')

DECLARE @RicercaDal AS DATETIME, @RicercaAl  AS DATETIME
SET @RicercaDal = '2017-01-01'
SET @RicercaAl = '2017-04-10'

SELECT CodiceFiscale,
SUM(DATEDIFF(day, IIF(Dal > @RicercaDal, Dal, @RicercaDal), IIF(Al < @RicercaAl, Al, @RicercaAl)) + 1) DIFFERENZA 
FROM Esempio
WHERE Dal BETWEEN @RicercaDal AND @RicercaAl 
OR Al BETWEEN @RicercaDal AND @RicercaAl
GROUP BY CodiceFiscale


Non è quello desiderato?
Modificato da andrea.tosato86 il 14 agosto 2017 17.10 -
32 messaggi dal 13 agosto 2017
andrea.tosato86 ha scritto:
Il seguente codice su SQL SERVER mi da il seguente esito:
CodiceFiscale DIFFERENZA
ITCCCCC 26

CREATE TABLE [dbo].[Esempio](
  [Id] [int] NOT NULL,
  [CodiceFiscale] [nvarchar](50) NULL,
  [Dal] [datetime] NULL,
  [Al] [datetime] NULL,
 CONSTRAINT [PK_Esempio] PRIMARY KEY CLUSTERED 
(
  [Id] ASC
))
GO

INSERT INTO Esempio(Id, CodiceFiscale, Dal, Al)
VALUES
(1, 'ITCCCCC', '2017-02-01T00:00:00', '2017-02-13T00:00:00'),
(2, 'ITCCCCC', '2017-04-01T00:00:00', '2017-04-13T00:00:00')

DECLARE @RicercaDal AS DATETIME, @RicercaAl  AS DATETIME
SET @RicercaDal = '2017-01-01'
SET @RicercaAl = '2017-04-10'

SELECT CodiceFiscale,
SUM(DATEDIFF(day, IIF(Dal > @RicercaDal, Dal, @RicercaDal), IIF(Al < @RicercaAl, Al, @RicercaAl)) + 1) DIFFERENZA 
FROM Esempio
WHERE Dal BETWEEN @RicercaDal AND @RicercaAl 
OR Al BETWEEN @RicercaDal AND @RicercaAl
GROUP BY CodiceFiscale


Non è quello desiderato?
Modificato da andrea.tosato86 il 14 agosto 2017 17.10 -


No non va con sql...ho provato con questo codice e mi dà 29! Non so perchè...

  Dim a As Date = Date.Parse(TextBox2.Text)
        Dim b As Date = Date.Parse(TextBox3.Text)
        Dim source2 As String = WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
        Dim sql2 As String = "SELECT Codfisc, SUM(DATEDIFF(day, IIF(Dal > @Dal, Dal, @Dal), IIF(Al < @Al, Al, @Al)) + 1) Total FROM Tab1 WHERE Dal BETWEEN @Dal AND @Al OR Al BETWEEN @Dal AND @Al GROUP BY Codfisc"
        Dim conn2 As New SqlConnection(source2)
        conn2.Open()
        Dim cmd2 As New SqlCommand(sql2, conn2)
        cmd2.Parameters.AddWithValue("@Codfisc", Me.GridView1.SelectedRow.Cells(8).Text)
        cmd2.Parameters.AddWithValue("@Dal", a)
        cmd2.Parameters.AddWithValue("@Al", b)
        Dim dr2 As SqlDataReader
        dr2 = cmd2.ExecuteReader()
        While dr2.Read()

            TextBox4.Text = dr2("Total").ToString()

            If IsDBNull(dr2("Total")) Then
                TextBox4.Text = "0"
            End If


        End While

        conn2.Close()

244 messaggi dal 22 gennaio 2017
Contributi
Che versione di sqlserver utilizzi?

Il codice SQL che ho inserito nell'ultimo post ti funziona su SQL? Corrisponde a quanto mi stavi chiedendo?
Modificato da andrea.tosato86 il 14 agosto 2017 19.25 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.