разбирать строку в произвольном формате даты c #

Есть несколько способов справиться с этим:

  • Используйте COALESCE для возврата первого значения не NULL ( SQL Fiddle )
    SELECT Personnel.Name, COALESCE(InternalRoles.Name, ExternalRoles.Name, 'Unknown') AS RoleName
    FROM Personnel
    LEFT OUTER JOIN InternalRoles ON InternalRoles.ID = Personnel.InternalRoleID AND Personnel.ExternalRoleID IS NULL
    LEFT OUTER JOIN ExternalRoles ON ExternalRoles.ID = Personnel.ExternalRoleID AND Personnel.InternalRoleID IS NULL
  • Используйте ISNULL для возврата второго значения, если заданное значение NULL ( SQL Fiddle )
    SELECT Personnel.Name, ISNULL(InternalRoles.Name, ExternalRoles.Name) AS RoleName
    FROM Personnel
    LEFT OUTER JOIN InternalRoles ON InternalRoles.ID = Personnel.InternalRoleID AND Personnel.ExternalRoleID IS NULL
    LEFT OUTER JOIN ExternalRoles ON ExternalRoles.ID = Personnel.ExternalRoleID AND Personnel.InternalRoleID IS NULL
  • Используйте CASE для определения поведения if-then-else ( SQL Fiddle )
    SELECT Personnel.Name, CASE WHEN Personnel.InternalRoleID IS NOT NULL THEN InternalRoles.Name ELSE ExternalRoles.Name END AS RoleName
    FROM Personnel
    LEFT OUTER JOIN InternalRoles ON InternalRoles.ID = Personnel.InternalRoleID AND Personnel.ExternalRoleID IS NULL
    LEFT OUTER JOIN ExternalRoles ON ExternalRoles.ID = Personnel.ExternalRoleID AND Personnel.InternalRoleID IS NULL

Реально, единственное, что вам нужно будет сделать, - это то, что лучше всего подходит стиль вашего запроса, так как все они имеют одинаковые планы выполнения и относительно одинаковое время выполнения. Лично я бы рекомендовал использовать COALESCE, так как он позволяет отображать значение по умолчанию, если одно из значений Name в ваших таблицах Internal / ExternalRoles оказывается NULL, если вы этого хотите.

-4
задан Baguette 19 January 2019 в 12:03
поделиться