Pracuję nad odszyfrowaniem niektórych procedur przechowywanychi mają minimalne słownictwo na ten temat. Czy ktoś może mi wyjaśnić, jaką rolę spełnia ten "1" w poniższym stwierdzeniu? Nie mogę znaleźć samouczków składni DISTINCT, aby to wyjaśnić. Odnoszę się do faktycznego "1" w stwierdzeniu.
USE TEST
GO
SET ANSI_NULLS, QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].sp_F_SQL
(@Id int)
WITH ENCRYPTION AS
SELECT DISTINCT
dbo.MAP_SQL.rID,
dbo.MAP_SQL.lID,
dbo.MAP_SQL.cID,
**1** as RESPFACT,
dbo.MAP_SQL.Longitude,
dbo.MAP_SQL.Latitude,
dbo.MAP_SQL.Altitude,
...
Odpowiedzi:
2 dla odpowiedzi № 1The 1
nie ma z tym nic wspólnego DISTINCT
. Po prostu dodaje kolumnę wyjściową zatytułowaną RESPFACT
ma wartość 1
dla wszystkich rzędów. Podejrzewam, że cokolwiek jest trawiący wyjście wymaga tej kolumny.
SELECT DISTINCT
zwraca tylko "odrębne" wiersze z danych wyjściowych - czyli wiersze, w których WSZYSTKIE wartości kolumn są równe.
na przykład jeśli twój wynik bez odrębny był
1 2 ABC DEF
2 3 GHI JLK
2 1 ABC DEF
1 2 ABC DEF
Wtedy wiersze 1 i 4 będą postrzegane jako "równe" i jeden będzie zwrócony:
1 2 ABC DEF
2 3 GHI JLK
2 1 ABC DEF
Zwróć uwagę, że wiersze 1 i 3 NIE są równe, mimo że 3 z 4 wartości kolumn są zgodne.
2 dla odpowiedzi nr 2
The 1
generuje kolumnę o nazwie RESPFACT
. To zawsze ma wartość 1
.
Nie mogę powiedzieć, dlaczego to jest ważne dla sp_F_SQL
procedura.
The distinct
zwraca unikalne wiersze. Jeśli istnieją duplikaty wartości dla kolumn w select
następnie zwracany jest tylko jeden wiersz. Oczywiście, że RESPFACT
kolumna jest taka sama we wszystkich wierszach, więc nie ma wpływu na zwracane wiersze.