SQL Server: как присоединиться к первой строке

После многих испытаний я получил эту работу. С текущей версией Git для Windows Portable. Откройте окно командной строки Windows и выполните этот скрипт. Если в вашем рабочем каталоге есть изменения, он откроет терминал bash в вашем рабочем каталоге и отобразит текущий статус git. Он держит окно bash открытым, вызывая exec bash.

Если у вас есть несколько проектов, вы можете создать копии этого скрипта с другой папкой проекта и вызвать его из основного пакетного скрипта.

Обновить - проверить новые добавленные файлы, то есть файлы без следа.

=============

REM check git status of given folders. 

setlocal EnableDelayedExpansion

set GIT_HOME=D:\eclipse\devtools\PortableGit-2.6.2

set GIT_EXEC=%GIT_HOME%\mingw64\bin\git.exe
set GIT_BASH=%GIT_HOME%\bin\bash.exe

set GITREPO=D:\source\myproject

pushd %GITREPO%
%GIT_EXEC% status
%GIT_EXEC%  diff-index --quiet --cached HEAD
set VAR1=%errorlevel%
if not "%VAR1%"=="0" (
echo.
echo There are changes which are staged i.e. in index - but not committed.
echo.
)
%GIT_EXEC% diff-files --quiet
set VAR2=%errorlevel%
if not "%VAR2%"=="0" (
echo.
echo There are changes in working directory.
echo.
)

rem below for loop requires enabledDelayedExpansion
for /f "delims=" %%i in ('%GIT_EXEC% ls-files --others --exclude-standard') do (
    if "!VAR3!"=="" (set VAR3=%%i) else (set VAR3=!VAR3!#%%i)
)

if not "%VAR1%"=="0" set REQUIRECOMMIT=true
if not "%VAR2%"=="0" set REQUIRECOMMIT=true
if not "%VAR3%"=="" set REQUIRECOMMIT=true

if "%REQUIRECOMMIT%"=="true" (
    start "gitbash" %GIT_BASH% --login -i -c "git status; exec bash"
)

popd

endlocal
685
задан dumbledad 13 February 2019 в 21:01
поделиться

3 ответа

SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )

В SQL Server 2005 и выше можно было просто заменить INNER JOIN на CROSS APPLY:

SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2

Обратите внимание, что TOP 1 без ORDER BY не является детерминированным: в этом запросе Вы получите по одному строковому элементу на каждый заказ, но не определено, какой из них он будет.

Многократные вызовы запроса могут дать Вам различные строковые элементы для одного и того же порядка, даже если базовый не изменился.

Если Вам нужен детерминистический порядок, то к самому внутреннему запросу следует добавить пункт ORDER BY.

1134
ответ дан 22 November 2019 в 21:33
поделиться

Вы можете сделать:

SELECT 
  Orders.OrderNumber, 
  LineItems.Quantity, 
  LineItems.Description
FROM 
  Orders INNER JOIN LineItems 
  ON Orders.OrderID = LineItems.OrderID
WHERE
  LineItems.LineItemID = (
    SELECT MIN(LineItemID) 
    FROM   LineItems
    WHERE  OrderID = Orders.OrderID
  )

Это требует индекса (или первичного ключа) на Lineitems.lyitemid и индекс Lineitems.OrderiD или Это будет медленно.

26
ответ дан 22 November 2019 в 21:33
поделиться

Редактировать: Nevermind, Quassnoi имеет лучший ответ.

Для SQL2K, что-то вроде этого:

SELECT 
  Orders.OrderNumber
, LineItems.Quantity
, LineItems.Description
FROM (  
  SELECT 
    Orders.OrderID
  , Orders.OrderNumber
  , FirstLineItemID = (
      SELECT TOP 1 LineItemID
      FROM LineItems
      WHERE LineItems.OrderID = Orders.OrderID
      ORDER BY LineItemID -- or whatever else
      )
  FROM Orders
  ) Orders
JOIN LineItems 
  ON LineItems.OrderID = Orders.OrderID 
 AND LineItems.LineItemID = Orders.FirstLineItemID
5
ответ дан 22 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: